gpt4 book ai didi

java - 为什么我无法从通用参数访问属性?

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

从我试图通过的测试用例开始:

@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 (与常用的 TU 等相同)只是通用声明,它与您的类 Asset 无关.

只需删除 <Asset>来自Portfolio类声明。

有关 Java 泛型的更多信息,您可以在这里找到:

java generics

但这本教科书涵盖了全面的信息:

Java Generics FAQ

<小时/>

要实现您想要的效果,您需要将代码更改为:

Portfolio<T extends Asset>

还有:

public void buy(T asset)

关于java - 为什么我无法从通用参数访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691828/

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