1

ここで何が起こっているかのこの表記法を理解しようとしています。以下の例も。これを理解するのに役立つ追加のコードを誰かが提供できるかどうかを調べています。Tでジャンクを拡張するにはどうすればよいですか? それは何を意味しますか?

public class Junk<T extends Junk>
{

    public Junk()
    {

    }

    public T returnType()
    {
        return null; //? what would I even return
    }

    //what would I do to make sense of this class
}
4

4 に答える 4

2

Tジェネリック型パラメーターです。あなたはそれがジャンク、またはそのサブクラスであることを知っています。メソッドから有用なものを返すには、同じ型を使用する他のメソッドが必要です。例えば:

public class Junk<T extends Junk> {
    T var;

    public void setT(T var) {
        this.var = var;
    }

    public T returnType(){
        return var;
    }
}

type パラメーターが指定されているインスタンスを作成することで使用できます。

Junk junk = new Junk<Junk>();
junk.setT(new Junk<Junk>());
junk.returnType();

タイプセーフを失うことなくサブタイプを使用できるため、これは単に「T」の代わりに「Junk」を使用するよりも便利です。サブクラスがある場合は、次のSubclassJunkことができます。

Junk junk = new Junk<SubclassJunk>();
junk.setT(new SubclassJunk<Junk>());
SubclassJunk subclass = junk.returnType();
于 2012-11-29T19:16:44.510 に答える
2

勝手な推測で申し訳ありませんが、

T未定義の型のようですが、

ステートメントは、から派生<T extends junk>することを保証するための制約のように見えますTJunk

したがって、次のようなクラスがある場合

public class SmallJunk extends Junk
{

}

thenTは にすることができますが、SmallJunk他の型にすることはできません。

于 2012-11-29T19:11:02.337 に答える
1

class Junk<T extends Junk>Java での汎用プログラミングの構文です。これは、型Tがクラスで使用されている場合は常に、 の(まだ不明な) サブクラスを表すJunk必要があることを意味します。

于 2012-11-29T19:12:17.920 に答える
1

与えられた

public class junk<T extends junk<T>>
{

    public T returnType()
    {
        return (T)this;
    }
}

あなたはそれを次のように拡張します

public class Subclass extends junk<Subclass> {
}

継承されたreturnTypeメソッドは を返しSubclassます。標準 Java ライブラリでのこのパターンの最も顕著な例はenum型です。ここでは、enumFooが拡張されたクラスになります。Enum<Foo>

于 2012-11-29T19:13:19.870 に答える