Java 列表初始化时出现奇怪错误
我的一个朋友问我是否可以帮他找出他在一段代码上出错的原因,最重要的是,他添加代码时错误消失的原因。我已经查阅了关于这些课程的文档,也没有找到原因 代码如下:Java 列表初始化时出现奇怪错误,java,generics,Java,Generics,我的一个朋友问我是否可以帮他找出他在一段代码上出错的原因,最重要的是,他添加代码时错误消失的原因。我已经查阅了关于这些课程的文档,也没有找到原因 代码如下: import java.util.Arrays; import java.util.List; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTabbedPane; public class Test { public
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);
}
}
我可以在Java7中重复这个问题,但是当我切换到Java8时,不再给出错误。另外,如果我继续使用Java 7,但是我给了
Arrays.asList
一个类型参数,则不再给出错误
List<Class<? extends JComponent>> listComp =
Arrays.<Class<? extends JComponent>>asList(JTabbedPane.class, JPanel.class);
listware在IntelliJ和Java 8.Hmmm中编译得很好,可能是jdk 7上的某种错误?O.OType推断在Java 8中发生了更改,答案可能是:这是一个陷阱:结果是编译器可以从所有类型中获得的最完整、最特定的类型
谢谢,精彩的解释。这也应该起作用:…=asList((JComponent)JTabbedPane.class,JPanel.class)
Hi@StephenC,你在使用Java8吗?在java 7 update 80中,我在代码中遇到了这个错误:类型不匹配:无法从一个列表转换到另一个列表
List<Class<? extends JComponent>> listComp =
Arrays.<Class<? extends JComponent>>asList(JTabbedPane.class, JPanel.class);