JAVA泛型类中使用 instanceof检查内部类型时报错。分析步骤
有如下代码,此时编译正常
class A { } class B { public void test(A a){ if (a instanceof AA){ } } class AA extends A{ } }
但将B类改为泛型后 test方法中AA处提示错误illegal generic type of instanceof
class A { } class B<T> { public void test(A a){ if (a instanceof AA){ } } class AA extends A{ } }
原因是编译器不知道AA的类型到底是什么了,因为要确定内部类AA的类型,得先确定class B<T> 中T的类型,所以报错
解决方法,明确B的类型(写法有点奇怪)
public void test(A a){ B<String> b = new B<>(); if (a instanceof B.AA){ } }
或者直接将AA这个内部类改为静态,即
class B { public void test(A a){ if (a instanceof AA){ } } class static AA extends A{ } }
发表评论