私が読んだことによると、これはできないと思いますが、確認したいと思います。私はクラスOpDTO
と他のいくつかを持ってい*DTO extends OpDTO
ます。次に、これらの子 DTO のリストから特定の要素だけを抽出し、抽出した要素を別のリストに返すメソッドが必要です。
public List<? extends OpDTO> getLastOp (List<? extends OpDTO> listDTOs) {
List<? extends OpDTO> last = new ArrayList<? extends OpDTO>(); //compile error: Cannot instantiate the type ArrayList<? extends OpDTO>
//processing
return last;
}
ult
の要素と同じ種類の要素のリストになり、listDTOs
OpDTO のメソッドのみを使用したいのですが、コンパイル エラーが発生します。
タイプをインスタンス化できません
ArrayList<? extends OpDTO>
私も次のようなことを試みました:
public <T> List<T> getLastOp (List<T> listDTOs) {
List<T> last = new ArrayList<T>();
//processing
return last;
}
しかし、listDTOs の要素を OpDTO のサブクラスにすることはできず、T をインスタンス化することもできません。何か考えはありますか?
編集
また、型をパラメーターとして渡すことも思いつきました。その後、インスタンス化できます。それは大丈夫でしょうか、それともある種の悪い習慣ですか?
private <T extends OpDTO> List<T> getLastOp (List<T> listDTOs, Class<? extends OpDTO> clazz) {
List<T> ult = new ArrayList<T>();
//processing
OpDTO op = clazz.newInstance();
//processing
ult.add((T) op);
op = listDTOs.get(i);
return ult;
}