2016-08-19 25 views
7

我對泛型不太滿意,因此還沒有找到解決方案。我有以下三種方法:Java - 使用可變參數並返回數組列表的方法?

public static List<ObjectA> objectAAsList(ObjectA ... items) { 
    return new ArrayList<>(Arrays.asList(items)); 
} 

public static List<ObjectB> objectBAsList(ObjectB ... items) { 
    return new ArrayList<>(Arrays.asList(items)); 
} 

public static List<ObjectC> objectCAsList(ObjectC ... items) { 
    return new ArrayList<>(Arrays.asList(items)); 
} 

我怎樣才能創建一個需要T(或東西)的可變參數的一個方法併爲其創建一個ArrayList?

回答

10

只是一個類型的變量替換您類型:

public static <T> List<T> genericAsList(T ... items) { 
    return new ArrayList<>(Arrays.asList(items)); 
} 

需要注意的是,你可以看看如何Arrays.asList聲明,因爲它在很大程度上同樣的事情,從類型的角度。

+0

謝謝!爲了幫助我理解,爲什麼我需要簽名中的'List '之前的''? – DoeMoeJoe

+0

它聲明一個類型變量作用域爲該方法。 –

+0

但是我在'List '中有'T'?爲什麼我之前需要它?爲什麼我不需要'列表'在我的原始方法簽名? – DoeMoeJoe

0

我認爲功能比靜態方法更好。您可以定義一個函數:

public class VarArgsToList<T> implements Function<T[], List<T>> { 

    @Override 
    public List<T> apply(final T... items) { 
     return new ArrayList<>(Arrays.asList(items)); 
    } 
} 

,並將其應用的地方:

public static void main(final String... arg) { 
    ... 
    final List<String> list1 = new VarArgsToList<String>().apply(arg); 
    ... 
    final List<MyObject> list2 = new VarArgsToList<MyObject>().apply(myObject1, myObject2, myObject3); 
    ... 
} 
+0

謝謝,但我不想在我使用它時傳遞的對象的類。 – DoeMoeJoe

+1

我沒有看到這種方法的優勢 - 這是如何「更好」? – Hulk

+0

@浩克,[看看](http://stackoverflow.com/questions/1530353/in-what-situations-is-static-method-a-good-practice)。 (的確,您可以將VarArgsToList視爲實用工具,但我仍然更喜歡函數方法,只是我的看法) – debus

相關問題