Ich habe eine Methode mit List
als Parameter.List Cast Fehler bei Verwendung Schnittstelle
private static void setData(List<IData> list) {
}
Die interface IData
ist
public interface IData {
int getData();
}
Und ich habe eine Klasse Data
benannt, die implements
die Schnittstelle von IData
public class Data implements IData{
@Override
public int getData() {
// TODO Auto-generated method stub
return 0;
}
}
Die Frage ist, wenn ich die Parameter der Liste verwenden Methode aufrufen , es kann nicht kompiliert werden.
public class Test {
public static void main(String[] args) {
List<Data> temp = new ArrayList<>();
for (int i = 0; i < 5; i++) {
temp.add(new Data());
}
setData(temp);
List<IData> temp2 = new ArrayList<>();
for (int i = 0; i < 5; i++) {
temp2.add(new Data());
}
setData(temp2);
}
private static void setData(List<IData> list) {
}
}
setData(temp)
ist Fehler. setData(temp2)
ist in Ordnung. Beide Listen haben denselben Inhalt. Ich verstehe nicht.
Verwenden Sie eine [obere Grenze] (https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html), dh 'setData (Liste Erweitert IData> Liste)' – TNT
Sie könnten verwenden 'private static void setData (List erweitert IData> list) {', aber dies könnte Auswirkungen auf Ihre Implementierung haben, persönlich würde ich nur 'List ' in 'List' –
MadProgrammer
ändern Obere Grenzen sind für Menschen am nützlichsten Wer hat die notwendige Grundlage in Generika, Vererbung und Subtyping erhalten. Selbst mit dieser Grundlage sind sie subtile Bestien. –