2013-01-21 35 views
0

我有以下的方法,我需要返回兩個字符串:type.getName()field.getName()的 返回兩個字符串作爲方法簽名

  • 價值

    做什麼是最好的方法?

    public static void getClassMetaData(List<Object> listClsObj) { 
        .... 
    
        for (Field field : declaredFields) { 
         Class<?> type = field.getType(); 
    
         System.out.println(type.getName()); 
         System.out.println(field.getName()); 
         } 
    } 
    
  • +4

    返回一個Array? – SomeJavaGuy

    +1

    我會返回一個Field對象。它有你需要的所有信息和更多。 –

    +0

    [Java中的C++ Pair 的等效物是什麼]的可能重複(http://stackoverflow.com/questions/156275/what-is-the-equivalent-of-the-c-pairl-r-in -java) –

    回答

    4

    我寧願只返回Field,因爲你可以從該type等信息field本身。

    然後在調用時調用方法 - field.getType()來獲取類型。


    好像你用你所有的類的聲明的字段,在這種情況下,你可以只返回List<Field>工作: -

    public static List<Field> getClassMetaData(List<Object> listClsObj) { 
    
        // Rather than iterating over `declaredField`, just return it 
        return declaredFields; 
    } 
    
    +0

    @StefanStrooves ..在答案中增加了一些東西。 –

    +0

    謝謝,但這裏的問題是,如果我返回的字段列表比方法誰調用getClassMetaData需要循環再次在字段列表...從性能方面,我認爲它不好。 –

    +0

    @StefanStrooves ..那麼,如果你正在返回列表,那麼當然你不會迭代它。所以迭代仍然只進行一次。不要過早考慮這些事情。增加一個額外的迭代不會有太大的區別。 –

    2

    您可以返回過程中的String數組,但我認爲這將是更好的只是返回現場

    1

    你可以返回大小爲2的數組兩個領域。

    return new String[]{type.getName(),field.getName()}; 
    
    2

    返回任意數量元素的更靈活和正確的方法 - 返回數據集合的List實現。

    1

    您可以直接返回Field實例而不是嘗試返回2 String。否則,您可以像Pair對象或自定義對象一樣返回包含2 String的對象。

    class Pair<F, S> { 
    
        private final F first; 
        private final S second; 
    
        public Pair(F first, S second) { 
         this.first = first; 
         this.second = second; 
        } 
        // getter for first and second 
    } 
    
    1

    您應該嘗試並返回一個列表,因爲您最終在其他代碼中使用了字段對象的屬性。

    加上它會使方法更易於維護。該方法的使用者可以從Field對象中決定需要哪些數據。