リポジトリ (Web サービスやデータベースなど) の型ハンドラーを作成する場合、値がリポジトリから読み込まれた後に型をインスタンス化する必要があります。
String
リポジトリから値を取得し、String
使用できる引数が 1 つあるコンストラクターがあるとします。戻り値の型に型パラメーターがある場合、生の型をインスタンス化する以外に何ができますか? 生の型はレガシー コードとの互換性のためだけに存在しているように見えるので、使用しないことをお勧めします。
通常は ?型パラメーターとして使用できますが (実行時に型が正しいことがわかっている場合)、ワイルドカードを型パラメーターとして使用してクラスをインスタンス化できないため、この場合は使用できません。
編集:いくつかのサンプルコード:
次のような PrimaryKey クラスがあるとします。
public class PrimaryKey<R extends RepositoryObject<R>> {
private String value;
public PrimaryKey(String value) {
this.value = value;
}
}
また、RepositoryObject を拡張する一連のクラスは、次のように定義されます。
public class RepositoryObject<R extends RepositoryObject<R>> {
private PrimaryKey<R> pk;
public RepositoryObject(PrimaryKey<R> pk) {
this.pk = pk;
}
PrimaryKey<R> getPrimaryKey() {
return pk;
}
}
サブクラスの例:
public class User extends RepositoryObject<User> {
public User(PrimaryKey<User> userId) {
super(userId);
}
}
クラス PrimaryKey の型処理メソッドは次のようになります。
public PrimaryKey<?> getValue(String stringValue) {
return new PrimaryKey<>(stringValue);
}
しかし、インスタンス化するときの代わりにダイヤモンド演算子を使用しているにもかかわらず、これによりコンパイラエラーが発生します (Eclipse IDE ではなく、奇妙なことに Maven ビルドで)。型パラメーターの再帰が原因で、何らかの理由で型推論がうまく機能しない可能性があります。