Pet*_* B. 1 java generics casting
我有以下类结构:
public interface RangeData {
public int getMaxVal();
public int getMinVal();
}
public class IncomeRange implements RangeData {
....
}
//In a utilities class
public RangeData findRangeData(List<RangeData> list, int value) {
....code....
}
Run Code Online (Sandbox Code Playgroud)
当我有一个收入范围列表时,问题就出现了,但我无法转换为RangeData列表.如果这是一个单项,那就没问题了.
List<IncomeRanges> incomes = xxx(); //returns the proper data.
//Yet this does not work.
findRangeData(incomes,55);
Run Code Online (Sandbox Code Playgroud)
我试图对它进行各种演员表,但似乎没有任何效果.我怎样才能让它发挥作用?
And*_*ira 10
Java泛型是不变的.这意味着,给定两个具体的类,A并且B,与SomeClass<A>它没有关系SomeClass<B>,即使它B是一个子类型A.
所以,List<RangeData>不是超类型List<IncomeRanges>.相反,您应该使用上限有界通配符,如下所示:
public RangeData findRangeData(List<? extends RangeData> list, int value) {
....code....
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看有关泛型,继承和子类型的文档.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |