从我试图通过的测试用例开始:
@Test
void testGetShare() {
// Given
Portfolio<Share> p = new Portfolio<>();
Share shareA = new Share("Share A");
// When
p.buy(shareA);
// Then
Assertions.assertEquals(shareA, p.get("Share A"));
}
我尝试将 Assets 对象存储在 Java HashMap 中,其中 Assets 提供 getTitle()
方法。但是,我似乎无法访问项目方法。
public class Portfolio<Asset> {
private Map<String, Asset> deposit = new HashMap<>();
// Unable to Access 'title'
public void buy(Asset a) {
deposit.put(a.title, a);
}
public Asset get(String title) {
return deposit.get(title);
}
}
我有两种 Assets ,我希望能够将它们存入(参数化)存款。
public class Asset { public String title; }
public class Share extends Assets { public Share(String title) {super(title);} }
public class Commodity extends Assets { public Commodity(String title) {super(title);} }
为什么我无法访问 Assets 参数的标题?
最佳答案
因为你的线路public class Portfolio<Asset>
- 这里Asset
(与常用的 T
、 U
等相同)只是通用声明,它与您的类 Asset
无关.
只需删除 <Asset>
来自Portfolio
类声明。
有关 Java 泛型的更多信息,您可以在这里找到:
但这本教科书涵盖了全面的信息:
<小时/>要实现您想要的效果,您需要将代码更改为:
Portfolio<T extends Asset>
还有:
public void buy(T asset)
关于java - 为什么我无法从通用参数访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691828/