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