2017-09-04 77 views
0

對不起,如果標題有點難以理解。我想要做的是創建一個泛型方法,它可以接受任何類型的ArrayList,並向其添加隨機生成的元素,它是它的類型。例如,如果我將一個Integer ArrayList傳遞給該方法,它將生成10個隨機整數並將它們添加到ArrayList。如果它是一個Long ArrayList,它將生成10個隨機Long值,依此類推。根據參數類型將隨機元素添加到ArrayList?

是否有某種類或接口會自動知道哪種類型需要生成? Random類的問題是你必須手動調用諸如「nextInt」之類的方法。它們不是隱含的基礎上,參數類型

這裏就是我的意思是(有沒有辦法有一個通用的Random類):

public static <AnyType> void addRandElements (ArrayList<AnyType> arr){ 
    arr.add(rand.nextInt()); 
    return arr; 

} 
+2

那麼,它應該如何產生,比方說,一個隨機字符串?或者一個隨機的BufferedReader?或者一個隨機ArrayList?或者隨機線程。大多數對象不能隨機生成,因爲沒有有限的可能值範圍,也沒有預定義的構造函數可供通用代碼生成隨機實例。 –

回答

3

傳中,適當類型的Supplier

public static <AnyType> void addRandElements (ArrayList<AnyType> arr, Supplier<? extends AnyType> supplier){ 
    // Surround with a loop to add more than one. 
    arr.add(supplier.get()); 
} 

該供應商可能會返回隨機元素:

addRandElements(intList,() -> rand.nextInt()); 

或固定ELE發言::一些其他類型的

addRandElements(strList,() -> "fixed string"); 

或元素:

addRandElements(listOfLists, ArrayList::new); 

但問題是,你需要指定的元素將如何產生的,作爲參數傳遞給這個泛型方法。