オブジェクトと文字列を取得する一般的なメソッドを作っています。ジェネリックメソッド] Javaの複数型パラメータを拡張
それは、このように最初で働いています。..
public static <K, V> V getValue(Pair<K,V> _pair, String k){ ... }
へ ..私は多分それはメインクラスのように
を働くと思った。しかし、私はバインドタイプがchildPairグランドないものに拡張したいですこれを制限する? ChildPairの行まで、GrandChildPairでそれを起動しないでください。 ので、私は、メソッド定義の最初の
public static <K extends ChildPair<K,V>, V extends ChildPair<K,V> V getValue (
を試してみたが、はい、それは私が複数の型パラメータは、Javaに延びているが、私はまだ.. Iが見つかりませんでした程度多分3時間検索したダムでした他のシングルタイプのpramが例を拡張するのを見つけましたが、私は全体を拡張することができません ジェネリックタイプ(検索にはあまり良くないかもしれません)
私は何ができますか?
public class Util {
///define method
//// //Type parameters //return type// method name (prams...) {
public static (Pair extends ChildPair) V getValue (Pair<K,V> _pair, String k) {
if (k != _pair.getK()) return null;
else return _pair.getV();
}
}
public class Pair<K, V> {
private K k;
private V v;
Pair(K k, V v) {
this.k = k;
this.v = v;
}
public K getK() {
return k;
}
public V getV() {
return v;
}
}
public class ChildPair<K, V> extends Pair<K, V> {
public ChildPair(K k, V v) {
super(k, v);
}
}
public class GrandChildPair<K, V> extends ChildPair<K, V> {
public GrandChildPair(K k, V v) {
super(k, v);
}
}
public class Main {
public static void main(String[] args) {
Pair<String, Integer> pair = new Pair<>("someone", 35);
Integer age = Util.getValue(pair, "someone");
System.out.println(age);
ChildPair<String, Integer> childPair = new ChildPair<>("gh", 20);
Integer childAge = Util.getValue(childPair, "sss");
System.out.println(childAge);
}
}
これを正しく読んでいるならば、ワイルドカードの境界線は必要ありません。引数を 'ChildPair'にしてください。 –
yshavit
私は本当にあなたの表記を理解していません、子
Sweeper
'' Pair''が 'GrandChildPair'のサブクラスである' ChildPair'のサブクラスであり、メソッドに 'ChildPair'が必要な場合、メソッドのシグネチャは' public static V getValue (ChildPair _pair、文字列のk) ' –
Andreas