[英]Java isInstance vs instanceOf operator
整個泛型的東西有點像扔我一個循環,更多的RTT。
Specificis? 啊,這里的要點是:
enum QueryHelper {
query1,
query2;
static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
if (expectedReturn.isInstance (SomeRelatedClass.class))
return query1;
else
return query2;
}
}
然后我會這樣稱呼它:
...
QueryHelper helper = QueryHelper.getQueryHelper(SomeRelatedClass.class);
...
這樣我就可以在實際幫助器中靈活地分配查詢返回類型。 它做了一些鑄造和對象創建。 我所看到的是,沒有比賽,我應該以其他方式這樣做嗎? 或者整個想法是不是很糟糕?
而真正的核心是我不理解class.isInstance和instanceOf運算符之間的區別? 我應該使用后者嗎?
這樣我就可以在實際幫助器中靈活地分配查詢返回類型。
這種方法的返回類型沒有任何靈活性
static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
if (expectedReturn.isInstance (SomeRelatedClass.class))
return query1;
else
return query2;
}
它將始終返回QueryHelper
的實例。 如果您希望返回類型具有靈活性,則需要將其定義為:
static <T> T getQueryHelper (Class<T> expectedReturn) {
}
現在返回類型是靈活的,因為它將取決於參數的類型
而真正的核心是我不理解class.isInstance和instanceOf運算符之間的區別?
不同之處在於instanceof執行在編譯時修復的類型檢查,例如:
static boolean isInstance(Object myVar) {
return (myVar instanceof Foo);
}
將始終檢查myVar是否為Foo的實例,而
static <T> boolean isInstance(Object myVar, Class<T> expectedType) {
return expectedType.isInstance(myVar);
}
將檢查myVar是expectedType的實例,但每次調用該方法時,expectedType都可以是不同的類型
Class.isInstance()不像您的代碼所期望的那樣工作。 它會測試傳遞給它的對象是否是該類的實例。 在你的代碼中:
expectedReturn.isInstance(SomeRelatedClass.class)
您傳遞的對象是Class對象。 試試這個,返回true:
Class.class.isInstance(SomeRelatedClass.class);
您可能正在尋找的是Class.isAssignableFrom() ,例如:
Object.class.isAssignableFrom(Class.class);
意味着你可以這樣做:
Class klass = ...;
Object o = klass;
isInstance的預期參數是一個對象,它可以是類對象表示的類的實例。 你要比較它的是一個類的實例... java.lang.Class
! 所以它不會匹配。
例如,是真的:
Class.class.isInstance(SomeRelatedClass.class);
也是如此(沒有關於以這種方式實際構建查詢助手的完整性的架構評論)
expectedReturn.isInstance(new SomeRelatedClass());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.