我可以在instanceof表达式中使用基本类型文字或类型变量吗?
class MyClass<T> {
{
boolean b1 = null instanceof T; // T erasure -> Object should be used
boolean b2 = 2 instanceof Integer; // Incompatible operands
}
Run Code Online (Sandbox Code Playgroud)
我收到了编译错误.有没有办法绕过这些错误并在instanceof表达式中使用原始类型的文字/类型变量?
基本上,我想要放心,不,我永远无法做到这一点.
不,因为类型擦除.一个实例MyClass<T>实际上并不知道是什么T.
你需要有一个实例Class<T>.然后你可以使用这个isInstance方法.一种方法是在构造函数中指定它:
class MyClass<T>
{
private Class<T> clazz;
MyClass(Class<T> clazz)
{
this.clazz = clazz;
}
// Now you can use clazz to check for instances, create new instances ect.
}
Run Code Online (Sandbox Code Playgroud)
对于第二个问题,问题是第一个操作数,而不是第二个操作数.原始值本身不是Integer; 盒装版本是:
Object obj = 2;
boolean b2 = obj instanceof Integer;
Run Code Online (Sandbox Code Playgroud)
只要你有一个真正的原始值,你就已经知道了这种类型,所以进行动态类型检查没有多大意义.