4

私が読んだことによると、これはできないと思いますが、確認したいと思います。私はクラス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の要素と同じ種類の要素のリストになり、listDTOsOpDTO のメソッドのみを使用したいのですが、コンパイル エラーが発生します。

タイプをインスタンス化できません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;
}
4

1 に答える 1