List
というパラメータを持つメソッドがあります。インターフェイスを使用するとリストキャストエラーが発生する
private static void setData(List<IData> list) {
}
interface IData
が
public interface IData {
int getData();
}
であると私は、私はメソッドを呼び出すためにリストのパラメータを使用するときに問題があるIData
public class Data implements IData{
@Override
public int getData() {
// TODO Auto-generated method stub
return 0;
}
}
のインタフェースをimplements
Data
という名前のクラスを持っていますコンパイルに失敗します。
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)
がエラーです。 setData(temp2)
は問題ありません。どちらのリストも同じ内容です。わかりません。サブタイプのインスタンスも、スーパータイプのインスタンスです:サブタイプががある-関係を確立するので
[上限](https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html)、つまり 'setData(List <?extends IData> list)' – TNT
を使用することができます'private static void setData(List <?extends IData> list){'しかし、これはあなたの実装に影響を与えるかもしれません、私は 'List 'を 'List' –
MadProgrammer
に変更するだけです。ジェネリック、継承、およびサブタイプ化に必要な基礎を得た人。その土台でさえ、微妙な獣です。 –