Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代实例化类集合的方法调用_Java_Iteration_Abstract - Fatal编程技术网

Java 迭代实例化类集合的方法调用

Java 迭代实例化类集合的方法调用,java,iteration,abstract,Java,Iteration,Abstract,它说我需要将s转换为泛型对象,并且显然不允许我访问任何字符串方法 我可以做这样的打字 for (NodekaClass pet : activePets) { for (String s : pet.getBuffs().keySet()) { } } 但这太笨重了。在这种情况下有更好的迭代方法吗?将公共HashMap getBuffs()更改为公共HashMap getBuffs() 正如编写的那样,您的方法返

它说我需要将s转换为泛型对象,并且显然不允许我访问任何字符串方法

我可以做这样的打字

        for (NodekaClass pet : activePets) {
            for (String s : pet.getBuffs().keySet()) {

            }
        }

但这太笨重了。在这种情况下有更好的迭代方法吗?

公共HashMap getBuffs()
更改为
公共HashMap getBuffs()


正如编写的那样,您的方法返回一个普通的
HashMap
,并希望返回一个通用版本,一个具有通用声明的版本。了解泛型只针对编译器,而不针对几乎不存在泛型的JVM,因此如果您的方法没有声明返回泛型,编译器将只知道该方法返回一个普通哈希映射。

为什么不这样做:

       for (NodekaClass pet : activePets) {
            for (Object o : pet.getBuffs().keySet()) {
                if ("Test".equals((String) o))
                {

                }
            }
        }
@覆盖
公共HashMap getbuff(){
归还这个。buff;
}

那么您的第一种方法就可以毫无痛苦地工作。

使用泛型来避免在运行时在集合中进行类型转换。

实际上,您不需要转换:
equals()
方法接受类型
对象的参数,因此此测试:

@Override
public HashMap<String,Boolean> getBuffs() {
    return this.buffs;
}

将正确且安全地工作,即如果
o
是字符串
“Test”
false
),它将是
true
,并且不会抛出任何异常,无论
o
是什么类(包括
null
)。

如果您的映射键是字符串,值是布尔值,您可以这样做:

if ("Test".equals(o))
抽象类NodekaClass{
抽象映射getbuff();
抽象虚空setBuffs(地图buff);
}

class Barbarian扩展了NodekaClass{
公众地图爱好者;
@凌驾
公共mapgetbuff(){
归还这个。buff;
}

好的,那么我是否返回通用的“HashMap”而不是我的特定容器?@isaacroas:您返回的是一个普通的
HashMap
,并且希望返回一个泛型版本,一个带有泛型声明的版本。请理解泛型仅用于编译器,而不用于几乎不存在泛型的JVM,因此如果您的方法没有声明返回泛型,编译器将只返回k现在,该方法返回一个普通的HashMap。您希望HashMap中有什么?键将始终是字符串?您希望值是什么?
if ("Test".equals(o))
abstract class NodekaClass {
abstract Map<String, Boolean> getBuffs();
abstract void setBuffs(Map<String, Boolean> buffs);   
class Barbarian extends NodekaClass {

public Map<String, Boolean> buffs;

@Override
public Map<String, Boolean>getBuffs() {
    return this.buffs;
}