2010-09-22 75 views
2
public class A { 
    static class B { 
    } 
} 

public class C { 
    void m(X x) { 
     if (x instanceof A.B) { ... } // not working 
    } 
} 

有沒有一種方法來驗證某些對象(x)是否實際上是某種類(A)的內部類(B)?使用不同類別的靜態內部類的instanceof

我得到這個錯誤,但我不幸有過類A和B.

無法控制的AB型是不可見的

+1

除非您可以公開內部類(或將您的調用者移動到與A相同的包中)。 – 2010-09-22 00:38:00

回答

2

我做了這個答案的評論,但是有一點反思(思維類型,而不是編碼類型),我將其轉化爲答案。

由於您無法控制A或B,而且B具有包訪問權限,因此只能從與A相同的包中的類中看到它。因此,您可以執行的操作 - 如果您不想要將C移入同一個包 - 編寫一個實用類 - 稱之爲U - 具有布爾函數,取一個X並返回它是否是AB的一個實例

+1

+1:有點反思(編碼類型,而不是思維類型)實際上可以做到這一點。但這不是要走的路。 – 2010-09-22 01:02:19

+0

你是什麼意思?我添加了一個新的程序包,其名稱與A所在的程序包的名稱相同,並且可以在助手類中訪問A.B。 – HTTPeter 2010-09-22 01:09:20

+0

恐怕我不明白這個問題 - 甚至是對我還是@donroby。 – 2010-09-22 01:17:12