更新这个问题不太关心改进下面的示例代码的最有效方法,因为它是关于为什么使用重载方法(或不是)优先使用重载方法的根本原因(以及在什么情况下)。因此,落在上述范围内的答案将是最大的帮助。谢谢。
我有一般的最佳做法'有关使用重载方法与投射的问题,并想知道哪一个被认为是更好的'为什么。
比如说,我有两种不同的对象,比如Animal-Object和Computer-Object,我希望通过两种完全相同的方法添加到原始数组(而不是ArrayList)中。他们的类型以外的各方面。在这种情况下,在重载方法方法中创建两个具有相同名称的单独方法(每种类型一个)是否更好?或者创建一个由' Object&#39组成的单个方法会更明智;对象,然后再转换成所需的类型?
OPTION ONE(未经测试的代码)
public Animal[] updateArray(Animal name, Animal[] animalArray){
Animal[] updatedArray = null;
if(animalArray==null){
updatedArray = new String[1];
updatedArray[0] = name;
}else{
updatedArray = new Animal[animalArray.length +1];
for(int i = 0; i<animalArray.length;i++){
updatedArray[i] = animalArray[i];
}
updatedArray[updatedArray.length-1] = name;
}
return updatedArray;
}
和...
public Computer[] updateArray(Computer name, Computer[] computerArray){
Computer[] updatedArray = null;
if(computerArray==null){
updatedArray = new String[1];
updatedArray[0] = name;
}else{
updatedArray = new Computer[computerArray.length +1];
for(int i = 0; i<computerArray.length;i++){
updatedArray[i] = computerArray[i];
}
updatedArray[updatedArray.length-1] = name;
}
return updatedArray;
}
选项二:使用更通用的方式做事并进入正确的类型INSTEAD ... (未经测试的代码)
public Object[] updateArray(Object name, Object[] computerArray){
Object[] updatedArray = null;
if(computerArray==null){
updatedArray = new String[1];
updatedArray[0] = name;
}else{
updatedArray = new Computer[computerArray.length +1];
for(int i = 0; i<computerArray.length;i++){
updatedArray[i] = computerArray[i];
}
updatedArray[updatedArray.length-1] = name;
}
return updatedArray;
}
并在某些方法中使用,如...
Animal[] animalArray = (Animal[]) updateArray(name, array);
Computer[] computerArray = (Computer[]) updateArray(name, array);
简而言之,哪种做事方式更好,出于什么原因 - 如果两者都有值得了解的成本和收益,那么请说明这些原因。 谢谢
答案 0 :(得分:3)
最好的方法是使用通用方法:
static<T> T[] updateArray(T t, T[] ary) {
T[] result = Arrays.copyOf(ary, ary.length+1);
result[ary.length] = t;
return result;
}
不幸的是,数组和泛型不能很好地混合,并且存在各种陷阱。例如,检查数组中的null并像在代码中一样创建新数组变得毛茸茸。这就是为什么我们有ArrayList
- 数组处理的蝙蝠侠。它得到了它的手,所以我们没有必要。