我正在使用反射來查看附加到類屬性的註釋是否屬於特定類型。現在我做:檢查註釋是否屬於特定類型
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
這令我有點kludgey因爲它依賴於一個字符串,它是一個完全合格的類名。如果將來命名空間發生變化,這可能會導致細微的錯誤。
我想這樣做:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
但javax.validation.Valid
是一個抽象類,不能被實例化。有沒有一種方法來模擬instanceof
(或基本上使用isInstance
)對接口或抽象類?
這是一種矯枉過正,因爲無論如何延伸註釋都是非法的。不知道與平等相比,是否有任何有意義的性能損失。 – Affe 2010-07-27 22:05:44
@Affe看到你的解決方案 - 我不知道你可以簡單地在'.class'上做一個'.equals'或'=='!感謝那。我的印象是使用'.class'只是比較'Class'對象而不是實際的類型。 – 2010-07-27 22:11:42
這個班級實際上是一個單身人士。確保每個類加載器對於給定類型只有一個Class對象實例,所以您可以在java中以這種方式進行比較。 – Affe 2010-07-27 22:22:14