我有以下代码:
public class Matrix<K, V> {
private final List<K> colKeys;
private final List<K> rowKeys;
private final Map<K, Map<K, V>> matrix;
public Matrix() {
colKeys = new LinkedList<>();
rowKeys = new LinkedList<>();
matrix = new TreeMap<>();
}
...
public V getCell(K row, K col) {
return matrix.get(row).get(col);
}
...
}
我在另一个类中这样访问它:
Matrix matrix = new Matrix<String, Double>();
...
for (String colKey : colKeys) {
double sum = 0;
int divider = 0;
for (String rowKey : rowKeys) {
if (matrix.containsCell(rowKey, colKey)) {
sum += (double)matrix.getCell(rowKey, colKey);
divider++;
}
}
}
请注意,我被强制将getCell(K row, K, col)
的返回值强制转换为double
,因为编译器会告诉我在没有它的情况下返回java.lang.Object
。
我很确定这是由于类型擦除造成的。 Java有很多使用泛型的数据结构,但不需要转换值。看看其中一些数据结构的实现,我仍然不知道如何解决这个问题。
所以,我的问题是:如何以不需要转换返回值的方式创建实现泛型的数据结构?
答案 0 :(得分:5)
像这样,
Matrix<String, Double> matrix = new Matrix<String, Double> ();
在Java 7(及更高版本)中,您可以使用菱形运算符缩短它;像这样,
Matrix<String, Double> matrix = new Matrix<>();