チェックされていない型キャストを取り除くことができるように、ユーティリティでメソッド シグネチャを正しく取得しようとしています。これまでのところ、私は持っています:
public interface Animal {
public long getNumberLegs();
public int getWeight();
}
public class Cat implements Animal {
public long getNumberLegs() { return 4; }
public int getWeight() { return 10; }
}
public class Tuple<X, Y> {
public final X x;
public final Y y;
public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}
}
public class AnimalUtils {
public static Tuple<List<? extends Animal>, Long> getAnimalsWithTotalWeightUnder100(List<? extends Animal> beans) {
int totalWeight = 0;
List<Animal> resultSet = new ArrayList<Animal>();
//...returns a sublist of Animals that weight less than 100 and return the weight of all animals together.
return new Tuple<List<? extends Animal>, Long>(resultSet, totalWeight);
}
}
今私は電話をかけようとしています:
Collection animals = // contains a list of cats
Tuple<List<? extends Animal>, Long> result = AnimalUtils.getAnimalsWithTotalWeightUnder100(animals);
Collection<Cat> cats = result.x; //unchecked cast…how can i get rid of this?
このユーティリティ メソッドを再利用して、適切な動物のリストを渡すことで、犬やネズミなどをチェックできるという考えです。getAnimalsWithTotalWeightUnder100() メソッドの署名にあらゆる種類の変更を加えようとしましたが、特定の種類の動物を渡して同じものを返すことができるように、構文を正しく取得できないようです。安全性の問題。
どんな助けでも大歓迎です!