我有一个超类Currency
,我想有一堆不同的子类继承这个超类,例如USD
,GBP
,YEN
等。
每个子类都有相同的属性和方法。方法将返回相同类型的值,但方法的主体需要略有不同。下面是一个示例(我使用API调用来获取我所拥有的每种货币的金额):
public class USD extends Currency {
public String symbol;
public String holdings;
public String bankAccountId; // Each currency has it's own account
public float getHoldings(String apiKey) {
HttpClient httpClient = HttpClient.newHttpClient();
URI uri = new URIBuilder(apiBaseurl)
.addParameter("module", "account")
.addParameter("action", "tokenbalance")
.addParameter("accountid", this.bankAccountId)
.addParameter("apikey", apiKey)
.build();
HttpRequest getHoldingsRequest = HttpRequest.newBuilder()
.uri(uri)
.GET()
.build();
HttpResponse<String> response = httpClient.send(getHoldingsRequest, BodyHandlers.ofString());
ObjectNode node = new ObjectMapper().readValue(response.body(), ObjectNode.class);
return node.get("result").asFloat();
}
}
我的主要问题是我不想在每个子类中重复这个getHoldings()
方法,所以我决定尝试将它放到Currency
超类中,但是我有两个新问题:
1.我不能在该方法中使用this.bankAccountId
(每种货币都保存在一个单独的帐户中,特定于该货币,我希望将String bankAccountId
作为特定货币子类的属性)。
1.我不能循环遍历每种货币并对每种货币使用getHoldings()
方法,如下所示:
Portfolio portfolio = new Portfolio();
String myApiKey = "duivbncvavsuivavcshinseo" // Some apiKey here
portfolio.setOwnedCurrencies(Arrays.asList(
new USD(),
new GBP(),
new YEN()
));
for (Currency currency : portfolio.getOwnedCurrencies()) {
System.out.println(currency.getHoldings(myApiKey));
}
我已经考虑过使用泛型,这样我就可以有Currency<USD>
,但是我不知道如何在这种情况下正确地使用它们。我也觉得我错过了一些非常基本/简单的东西,但是我已经盯着这个问题太久了,我就是看不到它。
编辑:我应该提到,每个Currency
子类都有其他唯一值,所以每个子类都有相同的属性,但属性会有不同,不仅仅是bankAccountId
。
1条答案
按热度按时间cgvd09ve1#
如果需要的话,为什么不通过将id作为Ann参数发送到方法中来使用它呢?“超类扩展自”对方法的处理在最差的保护方法中可以是包私有的(不应该是公共的)(除非你希望其他类能够直接访问),如果你需要从过程中带回多个结果,例如bankid和holdings答案,你可以返回一个数组或Vector。