Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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中具有不同值的动态字段/Hashmap的对象_Java - Fatal编程技术网

Java中具有不同值的动态字段/Hashmap的对象

Java中具有不同值的动态字段/Hashmap的对象,java,Java,我们正在用Java在数据库中进行一些知识发现 我们有不同的数据库,我们一无所知 一个示例场景:我们想检查一个实体是否具有属性名并重命名它。在python/js/dynamic语言中,这将是微不足道的: if Object.hasKey(name) => Object.name = "Jordan" 在java中是否有存储和操作泛型对象的方法? 很明显,类是多余的,因为我们不知道对象结构。Hashmaps也不会剪切它,因为对象可以将所有SQL类型作为属性类型,而Hashmaps仅限于同构字

我们正在用Java在数据库中进行一些知识发现

我们有不同的数据库,我们一无所知

一个示例场景:我们想检查一个实体是否具有属性名并重命名它。在python/js/dynamic语言中,这将是微不足道的:

if Object.hasKey(name) => Object.name = "Jordan"
在java中是否有存储和操作泛型对象的方法?
很明显,类是多余的,因为我们不知道对象结构。Hashmaps也不会剪切它,因为对象可以将所有SQL类型作为属性类型,而Hashmaps仅限于同构字段

除了@dotvav comment之外,还可以查看一下,它简化了反射的处理

例如:

Map<String, String> props = BeanUtils.describe(someObject);
if (props.containsKey("name")) {
    BeanUtils.setProperty(someObject, "name", "value");
}
Map props=BeanUtils.description(someObject);
if(道具容器(“名称”)){
setProperty(someObject,“name”,“value”);
}

除了@dotvav comment之外,我们还可以看看它,它简化了使用反射的工作

例如:

Map<String, String> props = BeanUtils.describe(someObject);
if (props.containsKey("name")) {
    BeanUtils.setProperty(someObject, "name", "value");
}
Map props=BeanUtils.description(someObject);
if(道具容器(“名称”)){
setProperty(someObject,“name”,“value”);
}

除了@dotvav comment之外,我们还可以看看它,它简化了使用反射的工作

例如:

Map<String, String> props = BeanUtils.describe(someObject);
if (props.containsKey("name")) {
    BeanUtils.setProperty(someObject, "name", "value");
}
Map props=BeanUtils.description(someObject);
if(道具容器(“名称”)){
setProperty(someObject,“name”,“value”);
}

除了@dotvav comment之外,我们还可以看看它,它简化了使用反射的工作

例如:

Map<String, String> props = BeanUtils.describe(someObject);
if (props.containsKey("name")) {
    BeanUtils.setProperty(someObject, "name", "value");
}
Map props=BeanUtils.description(someObject);
if(道具容器(“名称”)){
setProperty(someObject,“name”,“value”);
}

您仍然可以使用hashmap

Map<Strung, Object> map = new Hashmap<>();
map.put("name", new Integer());
map.put("another name", new String());

String value = (String)map.get("another name");
String value = (String)map.get("name"); // You get error here because integer type stored in map.
// check with 'instanceof' for type if necessary
Map Map=newhashmap();
put(“name”,new Integer());
put(“另一个名称”,新字符串());
字符串值=(字符串)map.get(“另一个名称”);
字符串值=(字符串)map.get(“name”);//这里出现错误,因为整数类型存储在映射中。
//如有必要,请使用“instanceof”检查类型

一切正常

您仍然可以使用hashmap

Map<Strung, Object> map = new Hashmap<>();
map.put("name", new Integer());
map.put("another name", new String());

String value = (String)map.get("another name");
String value = (String)map.get("name"); // You get error here because integer type stored in map.
// check with 'instanceof' for type if necessary
Map Map=newhashmap();
put(“name”,new Integer());
put(“另一个名称”,新字符串());
字符串值=(字符串)map.get(“另一个名称”);
字符串值=(字符串)map.get(“name”);//这里出现错误,因为整数类型存储在映射中。
//如有必要,请使用“instanceof”检查类型

一切正常

您仍然可以使用hashmap

Map<Strung, Object> map = new Hashmap<>();
map.put("name", new Integer());
map.put("another name", new String());

String value = (String)map.get("another name");
String value = (String)map.get("name"); // You get error here because integer type stored in map.
// check with 'instanceof' for type if necessary
Map Map=newhashmap();
put(“name”,new Integer());
put(“另一个名称”,新字符串());
字符串值=(字符串)map.get(“另一个名称”);
字符串值=(字符串)map.get(“name”);//这里出现错误,因为整数类型存储在映射中。
//如有必要,请使用“instanceof”检查类型

一切正常

您仍然可以使用hashmap

Map<Strung, Object> map = new Hashmap<>();
map.put("name", new Integer());
map.put("another name", new String());

String value = (String)map.get("another name");
String value = (String)map.get("name"); // You get error here because integer type stored in map.
// check with 'instanceof' for type if necessary
Map Map=newhashmap();
put(“name”,new Integer());
put(“另一个名称”,新字符串());
字符串值=(字符串)map.get(“另一个名称”);
字符串值=(字符串)map.get(“name”);//这里出现错误,因为整数类型存储在映射中。
//如有必要,请使用“instanceof”检查类型

一切正常

您可以使用反射来更改对象的私有字段

假设我们有一个
人类
对象,带有
名称
字段:

public static class Human {
    private String name;

    public Human(String name) {
        this.name = name;
    }

    public String toString() {
        return new StringBuilder("Name: ").append(this.name).toString();
    }
}
与其他一些建议的答案一样,您可以使用
HashMap
存储任何对象。您只需迭代映射,并将每个对象的属性传递给以下方法:

public static void changeName(Object obj, String newName) throws IllegalArgumentException, IllegalAccessException {
    for (Field f:obj.getClass().getDeclaredFields()) {
        if (f.getName().toLowerCase().equals("name")) {
            f.setAccessible(true);
            f.set(obj, newName);
            f.setAccessible(false);
        }
    }
}
此方法检索对象的所有字段,并将字段名与“name”进行比较。如果识别了字段,它将更改可访问性(对于私有字段),并将字段值更改为
newName

Human me = new Human("Ian");
System.out.println(me);
changeName(me, "Jan");
System.out.println(me);
输出:

Name: Ian
Name: Jan

可以使用反射更改对象的私有字段

假设我们有一个
人类
对象,带有
名称
字段:

public static class Human {
    private String name;

    public Human(String name) {
        this.name = name;
    }

    public String toString() {
        return new StringBuilder("Name: ").append(this.name).toString();
    }
}
与其他一些建议的答案一样,您可以使用
HashMap
存储任何对象。您只需迭代映射,并将每个对象的属性传递给以下方法:

public static void changeName(Object obj, String newName) throws IllegalArgumentException, IllegalAccessException {
    for (Field f:obj.getClass().getDeclaredFields()) {
        if (f.getName().toLowerCase().equals("name")) {
            f.setAccessible(true);
            f.set(obj, newName);
            f.setAccessible(false);
        }
    }
}
此方法检索对象的所有字段,并将字段名与“name”进行比较。如果识别了字段,它将更改可访问性(对于私有字段),并将字段值更改为
newName

Human me = new Human("Ian");
System.out.println(me);
changeName(me, "Jan");
System.out.println(me);
输出:

Name: Ian
Name: Jan

可以使用反射更改对象的私有字段

假设我们有一个
人类
对象,带有
名称
字段:

public static class Human {
    private String name;

    public Human(String name) {
        this.name = name;
    }

    public String toString() {
        return new StringBuilder("Name: ").append(this.name).toString();
    }
}
与其他一些建议的答案一样,您可以使用
HashMap
存储任何对象。您只需迭代映射,并将每个对象的属性传递给以下方法:

public static void changeName(Object obj, String newName) throws IllegalArgumentException, IllegalAccessException {
    for (Field f:obj.getClass().getDeclaredFields()) {
        if (f.getName().toLowerCase().equals("name")) {
            f.setAccessible(true);
            f.set(obj, newName);
            f.setAccessible(false);
        }
    }
}
此方法检索对象的所有字段,并将字段名与“name”进行比较。如果识别了字段,它将更改可访问性(对于私有字段),并将字段值更改为
newName

Human me = new Human("Ian");
System.out.println(me);
changeName(me, "Jan");
System.out.println(me);
输出:

Name: Ian
Name: Jan

可以使用反射更改对象的私有字段

假设我们有一个
人类
对象,带有
名称
字段:

public static class Human {
    private String name;

    public Human(String name) {
        this.name = name;
    }

    public String toString() {
        return new StringBuilder("Name: ").append(this.name).toString();
    }
}
与其他一些建议的答案一样,您可以使用
HashMap
存储任何对象。您只需迭代映射,并将每个对象的属性传递给以下方法:

public static void changeName(Object obj, String newName) throws IllegalArgumentException, IllegalAccessException {
    for (Field f:obj.getClass().getDeclaredFields()) {
        if (f.getName().toLowerCase().equals("name")) {
            f.setAccessible(true);
            f.set(obj, newName);
            f.setAccessible(false);
        }
    }
}
此方法检索对象的所有字段,并将字段名与“name”进行比较。如果识别了字段,它将更改可访问性(对于私有字段),并将字段值更改为
newName

Human me = new Human("Ian");
System.out.println(me);
changeName(me, "Jan");
System.out.println(me);
输出:

Name: Ian
Name: Jan
“通用对象”是什么意思?如果hasmap声明为,则可以存储任何类型的对象,那么在设置/获取值时,您必须检查对象的实例“通用对象”是什么意思?如果hasmap声明为,则可以存储任何类型的对象,然后,在设置/获取值时,您必须检查对象的实例“通用对象”是什么意思?如果hasmap声明为,则您可以存储任何类型的对象,那么在设置/获取值时,您必须检查