从我要通过的测试用例开始:
@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"));
}
我正在尝试将资产对象存储在Java HashMap中,其中资产提供了一种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);
}
}
我有两种资产希望存放在(参数化的)存款中。
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);} }
为什么我不能访问资产自变量的标题?
答案 0 :(得分:2)
因为您的行self._pred
-这里的in_degree
(与常用的public class Portfolio<Asset>
,Asset
等相同)只是泛型声明,它与您的课程无关T
。
只需从U
类声明中删除Asset
。
有关Java泛型的更多信息,您可以在这里找到:
但是这本教科书涵盖了全面的信息:
要实现所需的功能,需要将代码更改为:
<Asset>
并且:
Portfolio
答案 1 :(得分:1)
from google.colab import drive
drive.mount('/content/gdrive')
通用类型未在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);
}
}