Java 使用泛型进行类型检查
下面是一个说明类:Java 使用泛型进行类型检查,java,generics,Java,Generics,下面是一个说明类: class TypeChecker<T> { boolean isGood(Object something) { // won't compile return (something instanceof T); // maybe works, but oh so ugly! try { @SuppressWarnings("unchecked")
class TypeChecker<T> {
boolean isGood(Object something) {
// won't compile
return (something instanceof T);
// maybe works, but oh so ugly!
try {
@SuppressWarnings("unchecked")
T tmp = ((T) something);
}catch(ClassCastException e) {
return false;
}
return true;
}
}
类类型检查器{
布尔值是好的(对象){
//不会编译
返回(T的某个实例);
//也许管用,但太难看了!
试一试{
@抑制警告(“未选中”)
T tmp=((T)某物);
}catch(ClassCastException e){
返回false;
}
返回true;
}
}
有什么好办法吗
具体用途与示例中的稍有不同,但想法是相同的-检查类型为T(参数)的变量是否可以容纳特定对象。使用
两者都是正确的
还有,你的“可能有用”片段,不,那不起作用。泛型被擦除,因此未经检查的强制转换不会在运行时发生。这就是为什么它们没有受到检查。ClassCastException永远不会抛出。使用异常来确定逻辑流一开始并不好。这看起来很有希望,我将尝试一下。
class TypeChecker<T> {
private Class<T> ofType;
TypeChecker(Class<T> ofType) {
this.ofType = ofType;
}
boolean isGood(Object obj) {
return ofType.isInstance(obj);
}
}
"hello world" instanceof String
String.class.isInstance("hello world")