2017-09-04 75 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); 

但问题是,你需要指定的元素将如何产生的,作为参数传递给这个泛型方法。