gpt4 book ai didi

java - 如何在 HashMap 中使用泛型?

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:10 29 4
gpt4 key购买 nike

我有两种方法,一种返回 <Integer,String> 的 HashMap另一个返回 <Integer, Spanned> 的 HashMap 。有没有一种方法可以使用泛型将它们变成一个方法?

public static Map<Integer, Spanned> queryGMGText() throws ParseException {
ParseQuery<ParseObject> positionQuery = ParseQuery.getQuery("AndroidGMGContent");
positionQuery.whereExists("position");
List<ParseObject> ParsePositionResult = positionQuery.find();

final Map<Integer,Spanned> appText = new HashMap<Integer,Spanned>();

for (int i = 0; i < ParsePositionResult.size(); i++) {
appText.put(ParsePositionResult.get(i).getInt("position"), Html.fromHtml(ParsePositionResult.get(i).getString("appText")));
}

return appText;
}

public static Map<Integer, String> queryGMG(String field) throws ParseException {
ParseQuery<ParseObject> positionQuery = ParseQuery.getQuery("AndroidGMGContent");
positionQuery.whereExists("position");
List<ParseObject> ParsePositionResult = positionQuery.find();

final Map<Integer,String> fieldMap = new HashMap<Integer,String>();

for (int i = 0; i < ParsePositionResult.size(); i++) {
fieldMap.put(ParsePositionResult.get(i).getInt("position"), ParsePositionResult.get(i).getString(field));
}

return fieldMap;
}

如果是这样,我将如何实例化并调用它们?目前我正在这样做(来自另一个类(class)):

Map<Integer,Spanned> appTextMap = new HashMap<Integer,Spanned>();
try {
appTextMap = ParseContent.queryGMGText();
} catch (ParseException e) {
e.printStackTrace();
}
// now I can use it, i.e.
Spanned s = appTextMap.get(1);

最佳答案

严格回答问题:

由于 Spanned 的继承树没有共性和String ,您必须更改方法以返回 Map<Integer, Object>然后可以:

try {
Map<Integer, Object> appTextMap = ParseContent.queryGMGText();
// now I can use it, i.e.
Spanned s = (Spanned) appTextMap.get(1);
} catch (ParseException e) {
e.printStackTrace();
}

这当然违背了泛型的目的,但有助于揭示这里的真正问题。

重新考虑原始代码:

当然,将整个内容重写为如下所示似乎要好得多。这两个函数之间的唯一区别是 Html.forHtml(..)称呼。让我们假设一下(不失一般性)您确实想要 String而不是Spanned :

public static Map<Integer, String> queryGMGAppText() throws ParseException {
return queryGMG("appText");
}

public static Map<Integer, String> queryGMG(String field) throws ParseException {
ParseQuery<ParseObject> positionQuery = ParseQuery.getQuery("AndroidGMGContent");
positionQuery.whereExists("position");
List<ParseObject> ParsePositionResult = positionQuery.find();

final Map<Integer,String> fieldMap = new HashMap<Integer,String>();

for (int i = 0; i < ParsePositionResult.size(); i++) {
fieldMap.put(ParsePositionResult.get(i).getInt("position"), ParsePositionResult.get(i).getString(field));
}

return fieldMap;
}

也许你并不真正需要 queryGMGAppText()根本不。您是否在很多地方调用它,因此拥有这种便捷方法很重要?

关于java - 如何在 HashMap 中使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341742/

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