2012-01-11 64 views
2

有沒有辦法來重寫一個Java方法,唯一改變的是一個ArrayList?覆蓋在Java

例如:

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 

順便說一句,我用我的參數中的ArrayList創建的其他對象

ArrayList<MyObject>...  

回答

3

不幸的是,沒有。由於編譯後的type erasure,兩者沒有區別。

+0

我是否必須創建兩個方法(使用不同的名稱),它們中唯一改變的是參數?任何建議? – 2012-01-11 02:58:00

+0

你可以走那條路,是的。你用這個'ArrayList'在這個方法裏面做什麼? – 2012-01-11 02:59:22

+0

如果我有ArrayList ,MyObject有很多變量,其中一個是數字(雙精度)。我想根據該變量對ArrayList進行排序。問題是:我有MyObject2和MyObject3,它們與MyObject不同,但我也想對它們進行排序。 – 2012-01-11 03:05:28

9

在這種情況下,你可以嘗試製作方法本身仿製並使用類型爲ArrayList的類型......

public <T> void quickSortMethod(ArrayList<T> comparison, int start, int end) 
0

你可以做的是爲一個函數

ArrayList<Object>,int,int 

,然後基於arraylist的對象類型使用不同的分析

0

由於您將使用這些數組列表作爲參數對象,您可以定義自己的自定義對象,來自Arraylist的rit。這樣,編譯器會將您的重載識別爲具有不同的簽名。

當然,這意味着任何客戶端代碼都需要知道要傳遞哪個子類型。但是,這應該是一個相對容易解決的問題,因爲如果你知道你正在提供參數對象int,然後初始化一個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> 
     {} 
1

這是壓倒一切的一個有效的例子,這裏是 的也回答我們可以覆蓋靜態方法? 答案是否定的。

這裏是示例代碼。

package com.sample.test; 

類動物{

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

}

類貓延伸動物{

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(); 

} 

}

OUTPUT:

我們在動物類 我們在狗類的靜態覆蓋的方法 我們在動物類 我們在動物類