Переопределение в Java - PullRequest
2 голосов
/ 11 января 2012

Есть ли способ переопределить метод 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>...    

Ответы [ 6 ]

10 голосов
/ 11 января 2012

В этом случае вы можете попробовать сделать сам метод универсальным и использовать этот тип в качестве типа ArrayList ...

public <T> void quickSortMethod(ArrayList<T> comparison, int start, int end)
3 голосов
/ 11 января 2012

К сожалению, нет.Из-за стирания типа после компиляции нет никакой разницы между ними.

0 голосов
/ 01 мая 2015

Это верный пример переопределения, и вот также ответ: Можем ли мы переопределить статический метод?Ответ НЕТ.

вот пример кода.

  package com.sample.test;

класс Animal {

public static void showMessage() {
    System.out.println("we are in Animal class");
}

}

класс Dog extendsAnimal {

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");
}

}

класс Cat расширяет 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();

}

}

ВЫХОД:

мы в классе Animal мы в статическом переопределенном методе класса собаки мы в классе Animal мы в классе Animal

0 голосов
/ 11 января 2012

Поскольку вы будете использовать эти списки массивов в качестве объектов параметров, вы можете определить свои собственные пользовательские объекты, которые наследуются от 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>
      {}
0 голосов
/ 11 января 2012

Вы можете сделать это в одну функцию с помощью

ArrayList<Object>,int,int

, а затем на основе типа объекта массива использовать другой анализ

0 голосов
/ 11 января 2012

Ошибка говорит вам ответ: вы не можете делать то, что предлагаете.

http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

...