myr*_*ipe 1 java generics data-structures
我有以下代码:
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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
我像这样在另一个类中访问它:
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++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我被迫将返回的值转换为getCell(K row, K, col)to,double因为编译器会告诉我它返回a java.lang.Object而没有它.
我很确定这是由于类型擦除.Java有很多使用泛型的数据结构,但不需要转换值.看看其中一些数据结构的实现,我仍然不知道如何解决这个问题.
所以,我的问题是:如何以不需要转换返回值的方式创建实现泛型的数据结构?
像这样,
Matrix<String, Double> matrix = new Matrix<String, Double> ();
Run Code Online (Sandbox Code Playgroud)
在Java 7(及更高版本)中,您可以使用菱形运算符缩短它; 像这样,
Matrix<String, Double> matrix = new Matrix<>();
Run Code Online (Sandbox Code Playgroud)