有没有办法覆盖Java方法,唯一改变的是ArrayList?
例如:
public void quickSortMethod(ArrayList<Integer> comparison, int start, int end)
{}
public void quickSortMethod(ArrayList<Double> comparison, int start, int end)
{}
目前这给我以下错误:
Method quickSortMethod(ArrayList<Integer>, int, int) has the same erasure quickSortMethod(ArrayList<E>, int, int) as another method in type QuickSort
顺便说一句,我正在使用我在ArrayLists中创建的其他对象作为参数
ArrayList<MyObject>...
答案 0 :(得分:10)
在这种情况下,您可以尝试使该方法本身是通用的,并将该类型用作ArrayList类型...
public <T> void quickSortMethod(ArrayList<T> comparison, int start, int end)
答案 1 :(得分:3)
不幸的是,没有。由于编译后type erasure,两者之间没有区别。
答案 2 :(得分:0)
错误告诉你答案:你不能做你提出的建议。
http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
答案 3 :(得分:0)
你可以用
将它变成一个函数ArrayList<Object>,int,int
然后根据arraylist的对象类型采用不同的分析
答案 4 :(得分:0)
由于您将使用这些数组列表作为参数对象,因此您可以定义自己继承自Arraylist的自定义对象。这样,编译器会将您的重载识别为具有不同的签名。
当然,这意味着任何客户端代码都需要知道要传递的子类型。但这应该是一个相对容易解决的问题,因为如果你知道你正在为你的参数对象提供内容,那么初始化一个integerParamList。同样是双打。
在不了解其余代码的情况下,这可能是也可能不是一个合适的解决方案,但它可能会接近? (我无法对此进行测试,因此可能存在未知问题......)
public class mySortingClass {
public void quickSortMethod(IntegerParamList comparison, int start, int end)
{}
public void quickSortMethod(DoubleParameterList comparison, int start, int end)
{}
}
public class IntegerParamList extends ArrayList<Integer>
{}
public class DoubleParameterList extends ArrayList<Integer>
{}
答案 5 :(得分:0)
这是覆盖的有效示例,这也是答案 我们可以覆盖静态方法吗? 答案是否定的。
这是示例代码。
package com.sample.test;
class Animal {
public static void showMessage() {
System.out.println("we are in Animal class");
}
}
类狗延伸动物{
public void DogShow() {
System.out.println("we are in Dog show class");
}
public static void showMessage() {
System.out.println("we are in static overridden method of dog class");
}
}
class Cat extends Animal {
public static void showMessage(){
System.out.println("we are in overridden cat class");
}
}
公共类AnimalTest {
public static void main(String[] args) {
Animal animal = new Animal();
animal.showMessage();
Dog dog = new Dog();
dog.showMessage();
Animal animal2 = new Dog();
animal2.showMessage();
Animal animal3 = new Cat();
animal3.showMessage();
}
}
<强>输出:强>
我们在动物课上 我们在狗类的静态重写方法 我们在动物课上 我们在动物课