如何测试界面Foo <bar>是否可以从Baz“分配”?</bar>

时间:2011-08-04 23:05:55

标签: java generics

代码:

System.out.println(Comparable.<Integer>isAssignableFrom(one.getClass()));

错误:

comp.java:16: cannot find symbol
symbol  : method <java.lang.Integer>isAssignableFrom(java.lang.Class<capture#128
of ? extends java.lang.Integer>)
location: interface java.lang.Comparable
    System.out.println(Comparable.<Integer>isAssignableFrom(one.getClass()));

如何确定某个给定类型是否可以作为SomeInterface类型的参数传递?

PS:有没有一本Java参考手册/程序员的手册可以在合理的时间内给我这个问题的答案(即不需要阅读数千页不相关的词汇)?目前我发现自己通过反复试验编写Java,这真的很糟糕。

1 个答案:

答案 0 :(得分:2)

由于类型擦除,无法测试特定对象是否是特定泛型类型的实例(它看起来就像您在此处尝试的那样)。您可以获得的最接近的是测试对象是否是原始Foo类型的实例:

System.out.println(one instanceof Comparable);