它总是抱怨:
The method add(Matrix<T>) in the type List<Matrix<T>> is not applicable for the arguments (Matrix<String>)
在Extractor类的行中:
matrixList.add(new Matrix<String>(attributes));
在这3个类中定义我的泛型似乎有问题。有一种简单的方法可以解决此问题吗?尝试了不同的方法,无法解决。
public class Test {
public static void main(String[] args) {
Extractor<String> extractor = new Extractor<>();
extractor.extract();
}
}
class Extractor<T> {
private List<Matrix<T>> matrixList;
public Extractor() {
this.matrixList = new ArrayList<>();
}
public void extract() {
List<Attribute<String>> attributes = new ArrayList<>();
attributes.add(new Attribute<String>("Test 1"));
attributes.add(new Attribute<String>("Test 2"));
// !!!! The compiler is complaining here!
matrixList.add(new Matrix<String>(attributes));
}
public List<Matrix<T>> getList() {
return matrixList;
}
}
class Matrix<T> {
private List<Attribute<T>> attributes;
public Matrix(List<Attribute<T>> attributes) {
this.attributes = attributes;
}
public List<Attribute<T>> getAttributes() {
return attributes;
}
}
class Attribute<T> {
private T attribute;
public Attribute(T attr) {
attribute = attr;
}
public T getAttr() {
return attribute;
}
}
最佳答案
您的代码根本没有意义。您正在使Extractor
等通用,这意味着您希望它适用于不同类型。
但是,在Extractor.extract()
方法中,将专门创建Matrix
的String
并将其放入List<Matrix<T>> matrixList
中。
如果您的代码仅适用于String,则不应使其通用。只需使List<Matrix<String>> matrixList
。
想一想:如果现在要创建一个Extractor<Integer> intExtractor
,并调用intExtractor.extract()
,那么如何合理地运行代码?
或者,要进一步完善您的设计,请执行以下操作:
interface Extractor<T> {
public List<Matrix<T>> extract();
}
class DummyStringMatrixExtractor implements Extractor<String> {
// useless now, can be put in extract()
private List<Matrix<T>> matrixList;
public Extractor() {
this.matrixList = new ArrayList<>();
}
@Override
public List<Matrix<String>> extract() {
List<Attribute<String>> attributes = new ArrayList<>();
attributes.add(new Attribute<String>("Test 1"));
attributes.add(new Attribute<String>("Test 2"));
matrixList.add(new Matrix<String>(attributes));
return matrixList;
}
// useless now
public List<Matrix<T>> getList() {
return matrixList;
}
}
关于java - 编译器对我的Java泛型不满意,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44447931/