擷取方法錯誤
當您嘗試擷取方法時,您可能會發生下列一或多個常見錯誤。
選取的區塊參照到選項以外宣告的區域類型
區域類型宣告不是選項的一部份,但被選取來解壓縮的其中一個陳述式所參照。
請延伸選項來含括區域類型宣告,或減少選項使之不參照已選取的區域類型宣告。
在已選取的區塊中宣告的區域類型被外部選項參照到。
選項涵蓋一個區域類型宣告,但此類型亦在選取的陳述式之外被參照到。
請延伸選項來含括對區域類型的所有參照,或減少選項使區域類型宣告未被選取。
不清楚的回覆值:選取的區塊中對區域變數包含多個指派值。
在選取的區塊內發現對一個區域變數有多個指派。
請減少選項使之僅選取一個指派,或延伸選項使之除了對區域變數的參照之外,其他
所有參照至少也被選項所涵蓋。
不清楚的回覆值:發現對選取的區域宣告有多個參照
選項內宣告的多個變數亦參照到選項之外。
請減少選項使之僅選取一個變數宣告,或延伸選項使之除了對選定變數宣告的參照之
外,其他所有參照至少也被選項所涵蓋。
不清楚的回覆值:發現對區域變數的指派和對選定之區域宣告的參照
選取的區塊包含對一個區域變數的指派。此外,選項內宣告的一個變數亦於選項之外
被參照到。
請減少選項使之選取指派或區域宣告。
或延伸選項使之對於一個區域變數的所有參照或所有變數宣告皆被選項所涵蓋。
不清楚的回覆值:選項包含傳回陳述式,一個值必須從擷取的方法中傳回
選取的區塊包含一個傳回陳述式。此外,一個值必須從擷取的方法中傳回,因為也選
取對一個區域變數的指派或一個區域宣告。
請從選項中排除傳回陳述式,或從選項中排除對區域變數的所有指派或所有區域類型
宣告。
不清楚的回覆值:表示式有傳回類型,一個值必須從擷取的方法中傳回
選取的陳述式是必須傳回 Boolean 的表示式(例如一個 if-then-else 陳述式的條
件部份)。
此外,一個值必須從擷取的方法中傳回,因為也選取對一個區域變數的指派。
若要解決問題,則不只選取條件部份,還要選取整個陳述式。
選項包含一個 break 陳述式,但並未選取對應的 break 目標。
若要解決問題,請延伸選項來包含 break /continue 目標,或減少選項使 break /
continue 陳述式不被選項所涵蓋。
選項包含一個 continue 陳述式,但並未選取對應的 continue 目標。
若要解決問題,請延伸選項來包含 break /continue 目標,或減少選項使 break /
continue 陳述式不被選項所涵蓋。
無法從選項中擷取新方法。只能從最上層方法的主體中擷取陳述式
這是當我們遭遇問題但不知真正問題為何時常見的錯誤訊息。
此錯誤訊息通常出現的狀況如下:
-
選取整個方法,不只是方法主體的一部份
-
選項只涵蓋陳述式的一部份。擷取方法意義中的陳述式以分號分隔。
以下一些範例中,選項不標示一組陳述式,因此無法擷取:
-
foo().bar().baz();
若要解決問題,請選取整個訊息傳送鏈
-
int i= foo();
延伸選項來涵蓋整個宣告
-
除了陳述式之外,亦擷取一個 if-then-else 陳述式的整個條件部份。
所以下列選項是有效的:
if (i < 10 && j < 20)
選取整個條件部份來解決問題。
其中的選項 "if (i < 10 && j < 20)" 是 not。
選項在註解內開始
無法擷取部份註解。延伸選項使之涵蓋整個註解,或減少選項使之完全不涵蓋註解。
選項在註解內結束
無法擷取部份註解。延伸選項使之涵蓋整個註解,或減少選項使之完全不涵蓋註解。
無法擷取在一個陳述式中間結束的選項
請調整選項使它能完全涵蓋一組陳述式。擷取方法意義中的陳述式以分號分隔。
其他問題
下列問題是相當明顯的,不需加以說明。
-
無法擷取單一傳回陳述式。
-
只能擷取 void 傳回陳述式。
-
選項在一個類型宣告的中間開始或結束。
請選取整個宣告或方法主體的陳述式。
-
無法判斷要擷取之表示式的傳回類型。
-
無法從 if-then-else 陳述式的條件部份中擷取選取的陳述式。
-
無法從 do-while 陳述式的條件部份中擷取選取的陳述式。
-
無法從 while 陳述式的條件部份中擷取選取的陳述式。
-
選項未從 do 關鍵字後面直接開始。
-
選項必須涵蓋整個 do-while 陳述式或動作區塊的部份。
-
選項必須涵蓋整個 if-then-else 陳述式或 then 的部份,或是 else 區塊。
-
無法擷取給新的方法,因為選項包含一個傳回陳述式在行號...
-
選項必須涵蓋整個 switch 陳述式或單一 case 區塊的一部份。
-
選項必須涵蓋整個 synchronized 陳述式或 synchronized 區塊的一部份。
-
選項必須涵蓋整個 try 陳述式或 try、catch 或 finally 區塊的一部份。