Один мой друг спросил меня, могу ли я помочь ему выяснить причину ошибки, которую он получает на куске кода и наиболее важно, почему ошибка исчезает, когда он добавляет часть кода, Я просмотрел документы о классах и не смог узнать причину.
Вот код:
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 80
Обновление 2
Другой друг предложил этот кусок кода, и он также работает:
List<Class<? extends JComponent>> listComp =
new ArrayList<Class<? extends JComponent>> ( Arrays.asList( JTabbedPane.class,
JPanel.class));