相当するC#コードのJavaコードを書きたいと思います。私のコードのJava:型が型パラメータであるオブジェクトを作成します。
public abstract class A<T> where T : A<T>, new()
{
public static void Process()
{
Process(new T());
}
public static void Process(T t)
{
// Do Something...
}
}
public class B : A<B>
{
}
public class C : A<C>
{
}
のJava等価では次のようになります。次のように
私のC#コードです。クラス宣言の力でここ
public abstract class A<T extends A<T>>
{
public static <T extends A<T>> void process()
{
process(new T()); // Error: Cannot instantiate the type T
}
public static <T extends A<T>> void process(T t)
{
// Do Something...
}
public class B extends A<B>
{
}
public class C extends A<C>
{
}
}
「新しい()」構文は、基本クラスから「新しいT()」を呼び出すことが可能になり、デフォルトの建設業者を書くためのクラスを派生しました。言い換えれば、基本クラスをwrtingしているとき、私は基本クラスから派生クラスオブジェクトをインスタンス化できるように、派生クラスにデフォルトコンストラクタがあることを確信しています。 Javaで
私の問題は、私はスーパークラスから派生したクラスのオブジェクトをインスタンス化することはできません。 "new T()"
の呼び出しで"Cannot instantiate the type T"
エラーが発生します。 JavaでC#と似たような方法がありますか?プロトタイプのパターンやクローニングのようなものを使うべきですか?
お返事ありがとうございます。私は静的メソッド内に新しいインスタンスを作成しようとしているので、getClass()を呼び出すことはできません。 T.classの他にコンパイル時の構築が存在しません。だから、反射は私のための解決策のようには見えません。または、私はそれをまだ見つけられませんでした(: –
サブクラスが 'public class B extends A 'のサブクラスであれば、これはまったく同じ問題です。型トークンを使用するほうが、呼び出し側にトークンをコンストラクタまたはメソッドに渡すように要求する方がよい –