1

以下の 2 つのクラスを (C# で) 組み合わせるのに最適な方法は何だろうと思っていました (型が必要ない場合に型を指定するかどうかを選択できるようにするため)。また、必要に応じてより多くの引数を受け取るように MyClass をコーディングするための推奨される方法は何ですか? ありがとう!

public class MyClass{

    public MyClass() {}
}

public class MyClass<T> {

    T myvariable;   

    public MyClass<T>(T arg){       
        myvariable = arg;
    }

    // how can I handle MyClass(arg1, arg2, ....?
    // would I need to create classes MyClass<T,U,...> for each number of argument?
}

MyClass を次のいずれかで decare できるように...

MyClass my1 = new MyClass()
MyClass<string> my2 = new MyClass("test");
4

2 に答える 2

3

タイプが不要な場合に備えて、タイプを指定するかどうかを選択できるように

それらをマージして、2 つのコンストラクターを作成するだけです。

class MyClass<T> {

    T myvariable;

    public MyClass(){

    }

    public MyClass(T arg){
        myvariable = arg;
    }
}

ジェネリック型が必要ない場合は、Void( not void )を使用します。

public static void main(String[] args) {
    final MyClass<Void> my1 = new MyClass<Void>();
    final MyClass<String> my2 = new MyClass<String>("Test");
}

必要に応じてより多くの引数を受け取るように MyClass をコーディングする

同じ型の可変数の引数が必要な場合はT、varargs を使用します。

class MyClass<T> {

    T[] myvariable;

    public MyClass(){

    }

    public MyClass(T... arg){
        myvariable = arg;
    }

}

のように異種の型を可変数宣言する方法はありません<T, U, V...>

于 2012-07-06T07:00:21.167 に答える
1

静的ファクトリメソッドを実装して、タイプを明示的に指定しないようにすることができます。

public static MyClass<Void> create() {
    return new MyClass<Void>() 
}

public static <T> MyClass<T> create(T type) {
    return new MyClass<T>(type); 
}

その後、クライアントは次のように新しいインスタンスを作成できます。

MyClass<Void> noType = MyClass.create();
MyClass<String> withType = MyClass.create("some type");
MyClass<Integer> withInt = MyClass.create(123);

(自動ボクシングを有効にしている場合)。

于 2012-07-06T07:23:04.603 に答える