2013-08-26 277 views
-1

我喜歡在那裏這個類中認爲,目前2個不同的類別中可以通過對象的列表下面的方法。的Java get方法

public class DataTableEntity { 
List<Objects> objectContainer; 

public void setLinks(Class cls){ 
for(Object obj : objectContainer){ 
    //the cls variable will hold what type of object it is 
    //so I need to somehow say if its a 'dog' then the obj I am going through is a dog 
    // and the method is dog.getName else it might be cat and cat.getCatName etc. 
} 
} 

此功能被告知什麼列表具體是,然後應正確格式化該列表中的對象的屬性,然後才發送到客戶端。不同的對象對這些屬性具有不同的setter和getter名稱。所以我需要以某種方式採用通用的Class對象,看看它的實際類型是什麼類型,以便我知道使用「.getAbc/.setAbc」或「.getXyz/.setXyz」的方法。

這可能嗎?

+0

你可能會展示更多的代碼,因爲從你的問題我不能真正理解你想要做什麼。但其可能的和簡單的 – x4rf41

+0

基本上我只是在一個類中具有上述功能,該類具有List 的屬性,我們使用它作爲容器通過JSON發送到此容器使用的Web客戶端只是對象作爲一類Dog或Cat可以放在列表中以便通過JSON傳遞。然而,其中一個屬性需要改變,比如Dog.name,從「Fido」到「 Fido」,並且對於cat來說也是一樣,但是它的名字叫Cat.catName而不是Cat.Name。所以我需要以某種方式能夠通過容器列表,並確定它們是什麼,所以我知道哪些屬性進行格式化,然後 –

+0

將其從通用更改爲貓或狗,所以我可以調用Dog.setName或Cat。 setCatName在列表中的所有列表中

回答

1

喜歡這個?

public class DataTableEntity { 
    List<Objects> objectContainer; 

    // The Objects know already which Class they are, no need to pass it 
    public void setLinks() { 
     for(Object obj : objectContainer) { 
      if(obj instanceof ClassA) { 
       ClassA a = (ClassA)obj; 
       a.doSomething(); 
      } 
      else if(obj instanceof ClassB) { 
       ClassB b = (ClassB)obj; 
       b.doSomethingElse(); 
      } 
      // and so on ... 
     } 
    } 
} 

一個共同的Inteface會使代碼更好,因爲你不必檢查所有不同的類。但我不知道你的情況是否可能

0

您是否聽說過instanceof聲明?

它允許你檢查一個對象是一個類的實例還是它的子類,並返回一個布爾值。

像:

anyObject instanceof Object  // return true 

integerObject instanceof Integer // return true 

integerObject instanceof Number // return true 

integerObject instanceof Double // return false