1

不変のデータ構造を実装するためにファクトリ パターンを使用する必要がある割り当てがありますが、問題は、抽象クラスがジェネリックであり、静的メソッドがジェネリック型への参照を作成することで問題が発生することです。私の割り当てでは、静的メソッドを使用する必要があるため、パニックになり始めています。ヘルプ/提案はありますか? EDITはいくつかのサンプル コードを追加しました。これは、教授が私たちに署名を与えたメソッドの 1 つの仕様です。

ExampleClass.method1 : ExampleClass, T -> ExampleClass

ExampleClass.method2 : ExampleClass - > T

public abstract class ExampleClass<T>{

   //static method creates a new subclass of Example ("Push" method)
   public static Class method1(T x, ExampleClass c){
       return new method1(x, f);
    }   

   //Supposed to return an object type T ("pop" method)
   public static T method2(ExampleClass c){
       return c.method2Dynamic();
   }

私がこれらのように持っている方法は両方とも、日食で問題を引き起こしています。

4

3 に答える 3

3

あなたが実際に何をしたいのかわかりませんが、問題は正しい構文を探しているだけだとしましょう:

public class ExampleClass<T> {
    public static <T> Class<T> method1(T x, ExampleClass<T> c) {
        return c.method3(x);
    }
    public static <T> T method2(ExampleClass<T> c) {
        return c.method2Dynamic();
    }
    private Class<T> method3(T x) {
        return null;
    }
    private T method2Dynamic() {
        return null;
    }
}
于 2010-09-23T04:19:34.660 に答える
0

ジェネリック化されたクラスがある場合、静的メソッドで型パラメーターを使用することはできません。静的メソッドでは意味がないためです。たとえば、 を考えてみましょうArrayList<T>ArrayList<String> stingList = new ArrayList<String>()とを作成できますArrayList<Integer> integerList = new ArrayList<Integer>。したがって、それぞれ独自のパラメーター型を持つ ArrayList のインスタンスと、そのパラメーター型を利用できるインスタンス メソッド ( get. ただし、静的メソッドはインスタンスではなくクラスに属しているため、静的メソッドを呼び出すときは、ArrayList.staticMethod()NOTstringList.staticMethod()またはintegerList.staticMethod()(それもできますが、静的メソッドはインスタンス変数にアクセスできないため、実際には意味がありません。クラスで呼び出すのとまったく同じことを行います)。ただし、クラスで呼び出すと、型パラメーターはインスタンスでのみ使用されるため、クラスは型パラメーターのない単なる ArrayList になります。

ただし、Thomas が回答で示しているように、クラスの型パラメーターとは独立した独自の型パラメーターを持つメソッドを使用できます。したがって、これらのメソッドを次のように呼び出すことができますExampleClass.<String> staticMethod()。ここでは ExampleClass に型パラメーターがありませんが、メソッドには型パラメーターがあることに注意してください。<String>(コンパイラが使用されるパラメーターまたは戻り値の型から推測できる場合は、メソッド呼び出しでを省略できます: String s = ExampleClass.method2(new ExampleSubclass<String>()); 通常、それを推測するのにかなり良い仕事をします)

于 2010-09-23T08:51:45.637 に答える
0

ジェネリック メソッド (ジェネリック クラスではなく) のヘルプ については、 Java チュートリアルを参照してください。

これまでの説明から、静的メソッドとインスタンス メソッドの質問はここでは関係ありません。

于 2010-09-23T04:00:10.060 に答える