我有两个类。 ClassA和CLassB,它们没有任何关系,但它们都具有相同的属性。是否可以施放它们或者我必须逐个设置属性?是否可以投两个不同的课程,但具有相同的属性?
1
A
回答
0
“中投”他们普遍使用这样的反射的唯一方法:
public static void copyObject(Object src, Object dest)
throws IllegalArgumentException, IllegalAccessException,
NoSuchFieldException, SecurityException {
for (Field field : src.getClass().getFields()) {
dest.getClass().getField(field.getName()).set(dest, field.get(src));
}
}
例子:
static class ClassA {
public int a;
public String b;
public double c;
}
static class ClassB {
public int a;
public String b;
public double c;
}
public static void main(String[] args) throws Exception {
ClassA a = new ClassA();
a.a = 1;
a.b = "test";
a.c = 3.14;
ClassB b = new ClassB();
copyObject(a, b);
System.out.println(b.a+", "+b.b+", "+b.c); // prints "1, test, 3.14"
}
但是,正如你可能已经猜到,这不是很好的办法做Java的东西。
1
不,您不能将实例从一个类转换为另一个类,如果它们没有任何关系。请查看Java Language Specification了解可能的演员表和转换。
然而,您可以通过手动或使用框架(如Dozer)来复制属性。
0
您可以创建一个Interface
,该类别由两个类实现以设置属性。
这种方式,而不是铸造您可以通过该接口引用它们
例
public interface PersonalInfo {
public void setName(String name);
public void setAge(int age);
}
然后你实现
public class ClassA implements PersonalInfo {
String name;
int age;
//other things and methods
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setAge(int age) {
this.age = age;
}
}
而对于ClassB的
public class ClassB implements PersonalInfo {
String name;
int age;
//other things and methods
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setAge(int age) {
this.age = age;
}
}
0
如果类不具有“是”关系(继承),则不能转换该类。在这种情况下,它必须逐个设置属性。可能会将一种方法添加到其中一个类中进行变换。
public class ClassB {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public ClassA transformToClassA(){
ClassA obj= new ClassA();
obj.setNum(this.num);
return obj;
}
}
0
不,你不能施放它们。你可以手动设置属性(最好的方式)或者编写某种类型的处理器来读取类的定义,并设置相同名称的字段中的字段 - 但这会非常脆弱,因为如果你决定改变类A中某些属性和类型的属性将与类B中的属性不兼容,您只能在运行时才会发现它。如果您稍后决定将属性添加到其中一个,而不是另一个,则会发生同样的情况。你显然可以设计一些防御措施,但这意味着创建一个复杂的逻辑,而你可以简单地手动设置属性而不需要任何逻辑,并且可以进行编译时检查。
相关问题
- 1. 不同的css类具有相同的属性,但值不同
- 2. 是否可以为不同视图声明具有相同名称的属性?
- 3. 两张表具有不同的用途,但具有相同的属性/字段
- 4. 具有相同名称但具有不同属性的序列化2属性
- 5. 是否有可能有两个具有相同名称的不同变量?
- 6. 类具有相同的接口,但不同类型的属性
- 7. Orion上下文代理实体是否具有两个名称相同但类型不同的属性?
- 8. 是否有可能有两个具有相同名称的ConnectionStrings?
- 9. 声明具有相同名称但不同类型的属性
- 10. 阅读具有相同名称但属性不同的元素
- 11. 单个类的两个实例是否具有相同的属性值?
- 12. 定义两次具有不同属性的相同Grunt任务
- 13. XSD两个名称相同,但不同的属性值
- 14. 我可以同时为两个属性声明相同的值:
- 15. 我可以拥有两个具有相同属性名称的对象吗?
- 16. XSD元素定义具有相同的名称,但具有不同的属性
- 17. 我可以假设两个具有相同System.identityHashCode的对象是相同的吗?
- 18. 不能两个ListItem对象具有相同的值属性吗?
- 19. 解析具有不同属性但具有不同属性的元素
- 20. 是否可以提交具有不同名称的相同应用程序?
- 21. 具有相同数据但不同类型的两个向量
- 22. 如何使用jquery检查两个属性是否具有相同的值?
- 23. 为什么一个元素具有相同的属性两次不同的值?
- 24. 附加两个不同的数组,它们可以具有相同的ID但不同的值?
- 25. 确定序列中两个或多个元素是否具有相同属性
- 26. 是否可以联合两个具有相同结构的CTE的结果集
- 27. 是否有可能有2个不同的NSNumber对象具有相同的值?
- 28. 如何共享具有相同属性的两个接口的所有属性
- 29. 比较两个EntityManagerFactories具有相同的连接属性的PersistenceUnits
- 30. 两个控制器是否可以有相同的中心
我不确定他想要一个界面。他提到他们没有任何关系。 –
实现相同接口的对象之间没有关系。两者都是他们自己的独立实现。他们只是遵循界面定义的协议。 – gtgaxiola