2012-01-17 83 views
0

我需要編寫一個可以同時使用數組和字符串引用的泛型方法。在這樣的方法裏面,根據參數,我需要檢查是否平等以及索引。對於數組,索引當然是[] operator,但對於String而言,它的方法是charAt()。另外,我想遍歷參數,因此對於數組我將使用length字段,對於字符串I將使用length()方法。爲了平等,我需要在數組中使用equals()方法,在字符串中使用==作爲字符。數組和字符串的java泛型

這是我最好寫兩個單獨的重載方法,或值得努力使其成爲一種通用的方法。

如果在後一種情況下,該怎麼做?

+0

你用這種方法試圖達到什麼目的? – legendofawesomeness 2012-01-17 20:20:15

+0

過載;你正在採取不同的類型。 – 2012-01-17 20:22:35

回答

0

從你對問題的描述中,你幾乎肯定會寫出兩個重載的方法。

目前尚不清楚將它們合併成一個是否會獲得什麼 - 如果有的話。但是,這樣做可能需要付出不小的努力,其結果可能會相當複雜。

此外,一個可以同時使用數組和String的方法將不得不採用Object作爲它的參數。一旦你接受Object,人們將能夠通過很多來調用你的方法,它不會知道如何處理;而不是編譯時失敗,組合的方法將不得不在運行時失敗。

0

我想你試圖達到相同的char[]-S和String-S。不值得編寫泛型方法(imo,因爲java中缺少操作符重載),但是您可以輕鬆地將char[]轉換爲String(反之亦然),然後執行相同的代碼(如果沒問題)。

+0

不一定是char [],我可以使用一些花哨的對象'myObjs []',其中'equals()'被覆蓋。 :) – 2012-01-17 20:28:20

+0

在這種情況下,絕對不同的方法。 (由於缺少重載),但我無法想象當你對字符串字面類型和「其他」類型做同樣的事情時的情況。 – zeller 2012-01-17 20:30:01

1

java中的數組是對象,因此您可以編寫一個方法來接收一個Object並使用「instanceof」函數進行測試。

public class MethodTest { 

public static void main(String[] args) { 
    String[] tst = new String[]{"SOME","TEXT"}; 
    doSomething(tst); 
    doSomething("TEST"); 
} 

public static void doSomething(Object o) { 
    if(o instanceof String) { 
     System.out.println((String) o); 
    } else if(o instanceof String[]) { 
     String something[] = (String[]) o; 
     for(String s : something) { 
      System.out.println(s); 
     } 
    } 
} 

} 

但我認爲兩種方法將是一個最好的方法......

+0

數組+1是對象 – zeller 2012-01-17 20:26:46

0

超載的方法。以通用的方式解決這個問題的努力將會是浪費並且很可能是不可讀的。

+0

所以它可以在Java泛型中解決嗎?大聲笑 – 2012-01-17 20:30:04