2

私が欲しいのは実際には次のようなものです:

public class Foo<T> {
    // ...
}

public class Foo<T, S> {
    // ...
}

クラスの名前は同じですが、タイプリストの長さが異なることに注意してください。上記のコードはJavaでは機能しませんが、私の意図が示されていることを願っています。Javaで同様のことを行うことは可能ですか?

例:

public class Foo<T> {
    public Integer call(T input) {
        // ...
    }
}

public class Foo<T, S> {
    public S call(T input) {
        // ...
    }
}
4

3 に答える 3

1

クラスをオーバーライドするのではなく、メソッドをオーバーライドします。クラスはサブクラス化される場合があります。

これは可能です:

public class Zoo<T, S, U> extends Foo<T>
{
    // ...
}
于 2012-11-29T19:18:46.823 に答える
1

これがあなたがやろうとしていることだと思います:

クラス foo1.Foo:

package foo1;

public class Foo<T, S> {
    public S call(T input) {
        // ...
    }
}

クラス foo2.Foo:

package foo2;

public class Foo<T> extends foo1.Foo<T, Integer> {
    public Integer call(T input) {
        // ...
    }
}
于 2012-11-29T19:20:56.170 に答える
0

クラスを次のように定義する場合

public class Foo<T> { // ... }

技術的には、Tが無制限であるため、GenericをObjectに置き換えるようにコンパイラーに指示しています。

クラスを次のように定義すると

public class Foo<T, S> {
// ...}

コンパイラはこれを解決する方法を知りません。

于 2012-11-29T19:30:21.563 に答える