一个朋友问我是否能帮助他找出代码中错误的原因,更重要的是当他添加一些代码时为什么错误会消失。我查看了关于类的文档,但也找不到原因。
这是代码:
import java.util.Arrays;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
public class Test {
public static void main(String[] args) {
/**
* This line shows this compilation error in eclipse:
* Type mismatch: cannot convert from
* List<Class<? extends JComponent&Accessible>>
* to List<Class<? extends JComponent>>
*/
List<Class<? extends JComponent>> listComp = Arrays.asList(JTabbedPane.class,
JPanel.class);
/**
* This one compiles fine and the difference is that
* he added JComponent.class on the list and the
* code is working fine
*/
List<Class<? extends JComponent>> listComp2 = Arrays.asList(JTabbedPane.class,
JPanel.class,
JComponent.class);
}
}
正如您所看到的,唯一的区别在于第二个列表变量中我们添加了JComponent.class
,错误消失了。
这是为什么呢?
更新
我们正在使用Java JDK 7 update 80
更新2
另一个朋友建议了这段代码,它也可以工作:
List<Class<? extends JComponent>> listComp =
new ArrayList<Class<? extends JComponent>> ( Arrays.asList( JTabbedPane.class,
JPanel.class));