我有兩個類。 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