问候。这是我在这个网站上的第一篇文章。
我认为由于type erasure,人们不能期望下面的代码能够编译,事实上,它没有在早期版本的 Eclipse 上编译。我的理解是instanceof是一个运行时运算符,并且不知道泛型类型将在运行时编译掉:
public static <E extends Comparable<? super E>>
void SampleForQuestion(E e)
{
if ( !(e instanceof String) )
System.out.println("I am not a String");
else
System.out.println("I am a String");
}
但是,我很惊讶地看到您的一个线程实际上在答案中包含了一些类似这样的代码,而我最新的 Eclipse(Windows 上的 Galileo 与 JVM 1.6 rev 20)对此非常满意——而且它也可以工作。(我确实注意到有人说它在 Eclipse 上工作,但在该线程中的另一个 IDE/JDK 中没有,但不记得具体细节。)
有人可以解释它为什么起作用,更重要的是,因为我必须指导我的学生,是否应该期望它在未来起作用。
谢谢你。(我希望代码格式正确 - 从我的角度来看,它看起来正确缩进并且没有标签。)