那是一個早晨,咖啡恰到好處,代碼似乎像杯子裡的咖啡一樣流暢。你坐在辦公桌前,準備解決專案中一個特別棘手的部分——一個連續幾天給你帶來麻煩的模組。問題不在於邏輯的複雜性,而是那些笨重、重複的程式碼似乎一行一行地持續下去。
你嘆了口氣,靠在椅子上。 一定有更好的方法,你想。
你的思緒又回到了前一天晚上讓你熬夜的 bug 上。這是那些陰險、難以追蹤的錯誤之一——由聲明得太寬泛的變數所引起的錯誤。罪魁禍首是您幾週前編寫的 if else 語句,其中的變數在需要後很長一段時間內一直在外部作用域中徘徊。
Object obj = 123; String result; if (obj instanceof String) { result = (String) obj; } else { result = obj.toString(); } System.out.println(result);
程式碼確實有效。但其中的一些事情讓你感到困擾。變數結果像先前流程中的幽靈一樣懸掛在更廣泛的範圍內,隨時可能造成混亂或更糟的情況——另一個錯誤。
但隨後您想起了您讀過的有關 Java 17 的內容:一個名為 流作用域 的小功能。這是看似微小的改變之一,卻可能產生巨大的影響。透過流程作用域,變數可以被限制在需要它們的特定區塊中,從而保持程式碼的其餘部分乾淨和集中。
你決定嘗試。
Object obj = 123; if (obj instanceof String str) { System.out.println(str); } else { System.out.println(obj.toString()); }
就好像一個重物被舉了起來。程式碼更緊湊、更優雅。不必要的變數消失了,留下了一個完全有意義的流程。你情不自禁地笑了——雖然是小小的勝利,但仍然是令人滿意的。
受到成功的鼓舞,您轉向了另一段一直困擾您的程式碼。這是一個經典的場景:一個物件可以是任何東西——字串、整數、雙精度——你必須先檢查它的類型,然後才能用它做任何事情。
舊方法很笨重,需要多個步驟才能到達好的部分:
Object obj = "Hello, World!"; if (obj instanceof String) { String str = (String) obj; System.out.println(str.toUpperCase()); }
你看著它吟唱了一聲。當然,它有效,但為什麼需要檢查類型然後進行轉換?為什麼不能簡單一點呢?
這時您想起了 Java 17 中的另一個小寶石:instanceof 的模式匹配。 這不僅僅是一個語法糖,這是一種簡化程式碼的方法,使其更具可讀性和更少的內容容易出錯。
您重構了程式碼,渴望看到差異:
Object obj = "Hello, World!"; if (obj instanceof String str) { System.out.println(str.toUpperCase()); }
效果立竿見影。程式碼更乾淨、更簡潔。類型檢查和強制轉換現在是一樣的,都在一行中。就好像程式碼在說您的語言,完全按照您想要的方式做,沒有任何額外的噪音。
隨著時間的推移,您發現自己越來越多地使用這些功能,像熟練的工匠一樣將它們編織到您的程式碼中。你開始看到這些微小變化的美妙之處——它們共同創造出比各個部分相加更偉大的東西。
到了下午,您正在深入重構一段總覺得有點笨拙的舊程式碼。這是一個處理混合類型數組的循環,每個元素都需要自己的特殊處理。之前,程式碼很冗長,每次類型檢查後都進行明確強制轉換。
但現在,借助 Java 17 的流程範圍和模式匹配,您看到了更好的方法:
public class PatternMatchingDemo { public static void main(String[] args) { Object[] elements = {"Java", 17, 3.14, "Pattern Matching"}; for (Object element : elements) { if (element instanceof String str) { System.out.println("String: " + str.toUpperCase()); } else if (element instanceof Integer i) { System.out.println("Integer: " + (i * 2)); } else if (element instanceof Double d) { System.out.println("Double: " + (d * 2)); } else { System.out.println("Unknown type"); } } } }
程式碼得到了簡化,每個邏輯區塊都包含在自己的範圍內,變數巧妙地與其特定流程相關聯。您驚訝於如此小的變化如何產生如此大的影響。重複的樣板文件消失了,取而代之的是感覺正確的清晰和簡單。
當您收拾好當天的行裝時,您會情不自禁地思考 Java 17 對您的程式碼帶來了多大的改變。這些並不是華而不實的新功能,但它們以自己安靜的方式發揮強大的作用。流程範圍和模式匹配幫助您編寫的程式碼不僅更有效率,而且更易於閱讀和維護。
在軟體開發的世界中,往往是小事帶來了最大的不同。今天,您已經發現 Java 17 的小技巧(流程範圍和模式匹配)正是您所需要的,可以讓您的程式碼變得更好,一次一行。
以上是小調整的力量:Java #s 流程範圍與模式匹配揭曉的詳細內容。更多資訊請關注PHP中文網其他相關文章!