2 回答
TA贡献1834条经验 获得超8个赞
因为你行public class Portfolio<Asset>
-在这里Asset
(同为常用的T
,U
等等)只是普通的声明,并没有涉及到你的类Asset
。
只需<Asset>
从Portfolio
类声明中删除。
您可以在此处找到有关 Java 泛型的更多信息:
但是这本教科书涵盖了全面的信息:
要实现您想要的功能,您需要将代码更改为:
Portfolio<T extends Asset>
和:
public void buy(T asset)
TA贡献1836条经验 获得超3个赞
该Assert通用型不设置任何势必Portfolio:
public class Portfolio<Asset> {}
就像你已经声明:
public class Portfolio<Asset extends Object> {}
所以泛型类型Asset有界Object并且Object没有任何title字段。
你想要的是:
public class Portfolio<A extends Asset> {
private Map<String, A> deposit = new HashMap<>();
public void buy(A a) {
deposit.put(a.title, a);
}
public A get(String title) {
return deposit.get(title);
}
}
您必须在泛型类声明中声明上限通配符,而您仅在声明具有泛型类类型的变量时才指定具体类型:
Portfolio<Share> p = new Portfolio<>();
添加回答
举报