以例如:
public static String[] multipleOfSameSet(String var,int setLength){
String[] out = new String[setLength];
for(int i=0; i<setLength; i++){
out[i] = var;
}
return out;
}
但我希望这适用于int,double和其他10个类。 我尝试使用一个类代替String,它给了我一个错误的世界。这里:
甚至可能吗?如果是,我该怎么做?
答案 0 :(得分:3)
是的,这是可能的。一种选择是尝试找到一个类,它是您要使用的所有类的超类,或者是您所有类实现的接口。在您的情况下,唯一的候选人可能是对象:
public static Object[] multipleOfSameSet(Object var, int setLength) {
Object[] out = new Object[setLength];
for(int i = 0; i < setLength; i++) {
out[i] = var;
}
return out;
}
这将起作用,因为所有Java类都直接或间接地扩展Object。原始值会自动转换为对象(整数变为Integer
s,双精度变为Double
等等。
这种方法的缺点是,你得到了一个对象数组,并且你可以用它们做很多事情。你可能想要考虑的是让你的方法接受一些泛型类型T,并返回一个T的ArrayList:
public static <T> ArrayList<T> multipleOfSameSet(T object, int setLength) {
ArrayList<T> out = new ArrayList<T>();
for(int i = 0; i < setLength; i++) {
out.add(object);
}
return out;
}
但是,如果您之后不需要修改列表,我会选择:
public static <T> List<T> multipleOfSameSet(T object, int setLength) {
return Collections.nCopies(setLength, object);
}
答案 1 :(得分:0)
您可以使用接口或定义的类类型。
public static MyInterface[] multipleOfSameSet(MyInterface var, int setLength) {
MyInterface[] out = new MyInterface[setLength];
for(int i = 0; i < setLength; i++) {
out[i] = var;
}
return out;
}