JAVAおよびジェネリック型の問題

JAVA and generic types issue


質問 written by sp00m @2013-02-06 10:12:38Z

: 6 : 1 : 184

私はジェネリック型の問題に直面しています:

public static class Field<T> {

    private Class<? extends T> clazz;

    public Field(Class<? extends T> clazz) {
        this.clazz = clazz;
    }

}

public static void main(String[] args) {

    // 1. (warning) Iterable is a raw type. References to generic type Iterable<T> should be parameterized.
    new Field<Iterable>(List.class);

    // 2. (error) The constructor Main.Field<Iterable<?>>(Class<List>) is undefined.
    new Field<Iterable<?>>(List.class);

    // 3. (error) *Simply unpossible*
    new Field<Iterable<?>>(List<?>.class);

    // 4. (warning) Type safety: Unchecked cast from Class<List> to Class<? extends Iterable<?>>.
    new Field<Iterable<?>>((Class<? extends Iterable<?>>) List.class);

}

1.と4.(またはその他の方法)の間に最適なソリューションは何ですか?

コメント 1

何を達成したいですか?それを知らずにあなたの質問に答えることは難しいです

written by ...-アンダースR. Bystrup @2013-02-06 10:07:08Z

コメント 2

クラスは厄介な獣になることができます。5番目のオプション: new Field<Iterable<Object>>(List.class) (「警告:未チェックの割り当て」)。

written by akaIDIOT @2013-02-06 10:11:43Z

コメント 3

ジェネリッククラス(java)Classオブジェクトの重複の可能性

written by -artbristol @2013-02-06 10:18:00Z

コメント 4

@ AndersR.Bystrupこれは、私が取り組んでいるプロジェクトのカスタムオブジェクトで直面している問題を反映した例です。だから私はより具体的にすることはできないと思う、申し訳ありません

written by ...-sp00m @2013-02-06 10:33:14Z

コメント 5

ソリューション

written by sp00m @2013-02-06 10:34:01Z

回答 1 written by Mikhail Vladimirov @2013-02-06 10:43:11Z
5
public class Field <T> {
    private Class <? extends T> clazz;

    public <TT extends T> Field (Class <TT> clazz) {
        this.clazz = clazz;
    }

    public static void main (String [] args) {
        new Field <Iterable <?>> (List.class);
    }
}
コメント 1

私は以前にコンストラクターで型パラメーターを見たことがありませんが、良い解決策

written by -SpaceTrucker @2013-02-06 10:24:20Z

コメント 2

これは本当にすごいことです。ジェネリック型をコンストラクターに推論できることに気がつきませんでした。そうは言っても、この解決策が2と同じエラーを引き起こさない理由を私は本当に理解していない

written by ...-sp00m @2013-02-06 10:39:24Z

コメント 3

@ sp00mコンパイラのバグを悪用していることは間違いありません( stackoverflow.com/q/11570215/774444を参照)。

written by ベンシュルツ @2013-02-06 13:23:51Z