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")