gpt4 book ai didi

Java 反射与克隆

转载 作者:行者123 更新时间:2023-12-02 02:37:20 25 4
gpt4 key购买 nike

示例我在之后有数据层

public class DemoData implements Cloneable {

private String name;
private String value;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone(); //To change body of generated methods, choose Tools | Templates.
}
}

我想将数据值(DemoData)分配给重复数据(DemoData 克隆)层,如下所示

public static void main(String[] args) {
DemoData demoData = new DemoData();
demoData.setName("Class Sources");
testReflectionDemo(demoData);
}

private static DemoData testReflectionDemo(DemoData demoData) {
try {
DemoData clone = (DemoData) demoData.clone();
clone.setName(demoData.getName());
clone.setValue(demoData.getValue());
return clone;
} catch (CloneNotSupportedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

我想将方法​​ testReflectionDemo(DemoData demoData) 转换为方法 testReflectionDemo(T t) 反射,如下所示。我不知道如何继续,请帮助我

public <T> T testReflectionDemo(T t){
Class<?> aClass = t.getClass();
for (Method method : aClass.getMethods()) {

}
return null;
}

最佳答案

谢谢大家对我的问题的帮助,我已经删除了克隆方法,我只是应用了反射。嗨@dabaicai。你的代码帮助了我这个想法,我认为将值传递给私有(private)字段会更容易一点点。

public static <T> T clazzClone(T t) throws InstantiationException, IllegalAccessException, NoSuchFieldException {
Class<?> clazzRoot = t.getClass();

Object newInstance = clazzRoot.newInstance();
Field[] fieldsClone = newInstance.getClass().getDeclaredFields();
for (Field fieldClone : fieldsClone) {
fieldClone.setAccessible(true);
fieldClone.set(newInstance, getContent(t, fieldClone.getName()));
}
return (T) newInstance;
}

private static String getContent(Object aClass, String name) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Field declaredField = aClass.getClass().getDeclaredField(name);
declaredField.setAccessible(true);
return (String) declaredField.get(aClass);
}

我的程序意味着当我需要编辑用户输入数据以输出我想要的结果时,具有通用的过滤功能

 fieldClone.set(newInstance,methodYourEdit(getContent(t, fieldClone.getName())));

关于Java 反射与克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087147/

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