gpt4 book ai didi

java - 使用泛型进行类型检查

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:46:54 25 4
gpt4 key购买 nike

这是一个插图类:

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(参数)的变量是否可以容纳特定对象。

最佳答案

使用Class#isInstance .

class TypeChecker<T> {
private Class<T> ofType;

TypeChecker(Class<T> ofType) {
this.ofType = ofType;
}

boolean isGood(Object obj) {
return ofType.isInstance(obj);
}
}

或者,如果您只需要 isInstance 检查,则只使用 Class 而不是在其周围创建包装对象。

没有其他方法可以动态执行运行时类型检查。您必须使用 Class

isInstanceinstanceof 具有相同的语义(除了左右手侧翻转)所以

"hello world" instanceof String
String.class.isInstance("hello world")

两者都是正确的。

此外,您的“可能有效”片段,不,那是行不通的。泛型被删除,因此在运行时不会发生未经检查的强制转换。这就是为什么他们未经检查。 ClassCastException 永远不会抛出。使用异常来确定逻辑流一开始并不好。

关于java - 使用泛型进行类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com