1

どうすればよいですか?1つのクラスしか拡張できないため、上限を1つだけ持つことができます。

私の場合、ジェネリック型をStringとintでバインドする必要があります。intの代わりに整数ラッパーを使用して自動ボクシングに依存する場合、それを作成できますが、問題は、他のクラスも型パラメーターとして渡すことができることです。

これを行うための最良の方法は何ですか?

4

2 に答える 2

5

List<Object>コレクションの非ジェネリックバリアント(リストなど)を使用することも、コードの意図をより明確に示すために使用することもできます。
これをMyListクラスでラップし、サポートするタイプごとにadd()、get()メソッドを作成します。

add(Integer elem);
add(String elem);

ただし、オブジェクトget()は入力できないため、意味があります。

したがって、最後に、オブジェクトとリストを使用して、ラッパーを省略することもできます。

于 2013-01-16T13:36:48.710 に答える
0

私はあなたがそれをすることができないと思います。文字列も最終クラスであり、すべてのものです。@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; }

}
于 2013-01-16T13:37:19.407 に答える