gpt4 book ai didi

java - 如何检查给定的类是否有一个字段并且它已被初始化?

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:28 25 4
gpt4 key购买 nike

如何检查给定的类是否有特定字段以及它是否已初始化(此时有值)?

abstract class Player extends GameCahracter {

}

public class Monster extends GameCahracter{

public int level = 1;
}
abstract class GameCharacter{

public void attack(GameCahracter opponent){

if (opponent instanceof Monster && ){ // << here I have to know is it instance of Monster and if it has initialized value
}
}

最佳答案

要不依赖异常地查看类是否有属性,可以使用这些方法:

private Boolean objectHasProperty(Object obj, String propertyName){
List<Field> properties = getAllFields(obj);
for(Field field : properties){
if(field.getName().equalsIgnoreCase(propertyName)){
return true;
}
}
return false;
}

private static List<Field> getAllFields(Object obj){
List<Field> fields = new ArrayList<Field>();
getAllFieldsRecursive(fields, obj.getClass());
return fields;
}

private static List<Field> getAllFieldsRecursive(List<Field> fields, Class<?> type) {
for (Field field: type.getDeclaredFields()) {
fields.add(field);
}

if (type.getSuperclass() != null) {
fields = getAllFieldsRecursive(fields, type.getSuperclass());
}

return fields;
}

只需调用:

objectHasProperty(objInstance, "myPropertyName");

其实类的实例看类有没有属性也无所谓,不过我是那样做的,只是为了更友好一点。总结一下:我将 getAllFields 设为递归的,以获取所有父类(super class)方法(在我的例子中这很重要)

之后,如果您想查看所需对象中的属性值是多少,您只需调用:

PropertyUtils.getProperty(objInstance, "myPropertyName");

记住:如果 objInstance 没有那个属性,上面的调用将抛出 NoSuchMethodException (这就是为什么你需要使用第一段代码来查看类是否有属性)

关于java - 如何检查给定的类是否有一个字段并且它已被初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10156626/

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