を実装したときに、私は、脳のけいれんを抱えている:私はpublic interface SomeInterface
とstatic private class SomeClass
を持っていると私の方法のいずれかからList<SomeInterface>
を返すようにしようと、私は取得しています(以下return list;
ライン上の)エラー:私は、新しいリストを作成することなく、この問題を解決するにはどうすればよいのjava:<SomeInterface>リストに一覧<SomeClass>から変換工assがSomeInterface
Type mismatch: cannot convert from List<GenericList1.SomeClass> to
List<GenericList1.SomeInterface>
?
明確化:私的に私がパブリックインターフェイスでものを超え工assのメソッドへの将来のアクセスを許可するようにList<SomeClass>
を維持したいので、私はリストが(おそらく、明白な解決策)List<SomeInterface>
として作成する必要はありません。これは以下の例の場合は表示されませんが、私の実際のプログラムではこれが必要です。
import java.util.ArrayList;
import java.util.List;
public class GenericList1 {
public interface SomeInterface
{
public int getX();
}
private static class SomeClass implements SomeInterface
{
final private int x;
@Override public int getX() {
return this.x;
}
public SomeClass(int x) { this.x = x; }
}
public static void main(String[] args) {
List<SomeInterface> list = createList(10);
printList(list);
}
private static void printList(List<SomeInterface> list) {
for (SomeInterface si : list)
System.out.println(si.getX());
}
private static List<SomeInterface> createList(int n) {
List<SomeClass> list = new ArrayList<SomeClass>();
for (int i = 0; i < n; ++i)
list.add(new SomeClass(i));
return list;
}
}
ああ、これは正常です。私の実際のプログラムでは、Collections.unmodifiableList()によってラップされたList <>を返していますので、それらは読み込み専用になります。 –
答えはアイテム28へのリンクを持っていましたが、リンクは現在死んでいます。この本のPDFは以下のサイトから入手できます:https://github.com/ldfaiztt/CSE331/blob/master/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf – Paul