どうすればよいですか?1つのクラスしか拡張できないため、上限を1つだけ持つことができます。
私の場合、ジェネリック型をStringとintでバインドする必要があります。intの代わりに整数ラッパーを使用して自動ボクシングに依存する場合、それを作成できますが、問題は、他のクラスも型パラメーターとして渡すことができることです。
これを行うための最良の方法は何ですか?
List<Object>
コレクションの非ジェネリックバリアント(リストなど)を使用することも、コードの意図をより明確に示すために使用することもできます。
これをMyListクラスでラップし、サポートするタイプごとにadd()、get()メソッドを作成します。
add(Integer elem);
add(String elem);
ただし、オブジェクトget()は入力できないため、意味があります。
したがって、最後に、オブジェクトとリストを使用して、ラッパーを省略することもできます。
私はあなたがそれをすることができないと思います。文字列も最終クラスであり、すべてのものです。@NimChimpskyが言ったように、おそらくObject自体を使用する方が良いでしょう。もう1つの解決策は、両方のクラスのラッパーですが、結果として得られるオブジェクトは、おそらくキャストして信頼する必要がありますinstanceof
。
class StringInt {
private String string;
private Integer integer;
public StringInt(String s) { this.string = s; }
public StringInt(Integer i) { this.integer = i; }
public Object getValue() { return string != null ? string : integer; }
}
または、明らかに実行時にのみ適用される醜い検証を使用します...
class StringIntGen<T> {
private T t;
public StringIntGen(T t) {
if (!(t instanceof String) && !(t instanceof Integer))
throw new IllegalArgumentException(
"StringIntGen can only be Integer or String");
this.t = t;
}
public T getValue() { return t; }
}