4

我有一个 LinkedHashMap,其中包含一个对象 atkey和一个 at value

我已经使用了代码

yourShots.keySet().toArray()[yourShots.size()-1]

返回 的最后一个对象keys。但是,我无法访问该对象具有的方法。

我已经使用该getClass()方法确定我确实拥有正确的对象,但无法调用该方法。我只是得到了找不到方法的错误。

难道我做错了什么?

4

3 回答 3

9

toArray给你通用Object类型。在使用它之前,您必须将其转换为您的key班级。

KeyClass key = (KeyClass) yourShots.keySet().toArray()[yourShots.size()-1];
// Here you can access your desired method

编辑:

正如@rgettman 建议的那样,您可以使用重载版本toArray(T[])来避免强制转换。keySet()在这种情况下,您应该预先提供一个大小为的初始化数组。

于 2018-05-03T18:27:49.297 回答
3

或者,您可以使用 anIterator来避免将所有不需要的键复制到数组中,然后将其丢弃。由于是通用的,它还节省了演员表。

Key key = null;
for(Iterator<Key> iterator = yourShots.keySet().iterator(); iterator.hasNext();) {
    key = iterator.next();
}
于 2018-05-03T18:32:25.480 回答
1

编辑:
您可以将您的转换keySet为 a List,然后获取最后一个对象。
像这样的东西:

List<Key> keys = new ArrayList(yourShots.keySet());
Key lastKey = keys.get(keys.size() - 1);

原始帖子
您正在访问错误的方法。

yourShots.keySet()返回一个Set包含所有键的Map.

为了访问地图中的最后一个值,您需要调用:yourShots.values()

希望这可以帮助

于 2018-05-03T18:29:14.310 回答