gpt4 book ai didi

java 。泛型类中的方法总是返回 Object

转载 作者:行者123 更新时间:2023-12-01 18:29:04 25 4
gpt4 key购买 nike

我有 Matrix 抽象类:

public abstract class Matrix<T> implements Cloneable {
public abstract void set(Long row, Long col, T val);
public abstract Set<Long> getRows();
public abstract Set<Long> getCols(Long row);
public abstract T get(Long row, Long col);
..

这是实现的一部分:

public class SparseMatrix<T> extends Matrix<T> {
private Map<Long, Map<Long, T>> matrix = new HashMap<Long, Map<Long, T>>();
private Size size;
T notObservedValue = null;

public SparseMatrix(Size size){
this.size = size;
}

public void setNotObservedValue(T value){
notObservedValue = value;
}
@Override
public void set(Long row, Long col, T val){
if( matrix.containsKey(row) )
matrix.get(row).put(col, val);
else{
Map<Long, T> cols = new HashMap<Long, T>();
cols.put(col, val);
matrix.put(row, cols);
}
}

@Override
public Set<Long> getRows(){
return matrix.keySet();
}
@Override
public Set<Long> getCols(Long row){
return matrix.get(row).keySet();
}

@Override
public T get(Long row, Long col){
Map<Long, T> r = matrix.get(row);
if(r != null){
T result = r.get(col);
if(result == null)
return notObservedValue;
return result;
}
return notObservedValue;
}

当我尝试迭代稀疏矩阵中的每个值时,此代码不起作用:

  for(Long row : matrix.getRows()){
for(Long col : matrix.getCols(row)){
continue;
}
}

错误是

java: incompatible types required: java.lang.Long found: java.lang.Object

正在通过使用手动转换来解决:

for(Long row : (Set<Long>)matrix.getRows()){
for(Long col : (Set<Long>)matrix.getCols(row)){
continue;
}
}

但是我不明白,为什么返回值类型是Object?它不是泛型方法,该方法在 Matrix 抽象类和 SparseMatrix 实现中声明为 Set getRows()。

最佳答案

您尚未正确实例化matrix目的。它必须是(例如):

SparseMatrix<Double> matrix = new SparseMatrix<Double>(new Size(3, 2));

原因是,当您使用对象的原始类型实例化对象时,所有通用信息都会被删除(这意味着代码中的每个通用部分都将被其原始变体替换)。因此,当您执行 SparseMatrix matrix = ... 时通用方法将被转换(例如)为:

@Override
public Set getRows(){
return matrix.keySet();
}
@Override
public Set getCols(Long row){
return matrix.get(row).keySet();
}

原始SetSet<Object> 相同这解释了为什么编译器强制您进行强制转换。

有关更多详细信息,请参阅the documentation on raw types .

关于 java 。泛型类中的方法总是返回 Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com