2014-10-17 13 views
5

Wiem, że to może nie mieć żadnego sensu, ale to tylko mój eksperyment. Istnieją 3 typy (o ile wiem), które obsługują metodę subString(). I wan't aby metoda rodzajowa tak:Java - ogólna metoda z ograniczonymi typami dla 3 podobnych typów: String, StringBuilder, StringBuffer

public static <T extends String & StringBuilder & StringBuffer> T substr3(T str) { 
     if (str.length() > 3) { 
      return (T) str.substring(0, 3); 
     } 
     return str; 
    } 

To nie będzie skompilować tak, ponieważ można używać jak wiele interfejsów, jak trzeba, ale tylko jedna klasa jako ograniczonego typu. Ta metoda powinna działać dobrze dla tych 3 typów: String, StringBuilder, StringBuffer, ale pytania brzmią: jak ustawić 3 typy jako ograniczone typy?

Odpowiedz

12

Dlaczego nie po prostu extend CharSequence?

public static <T extends CharSequence> T substr3(T str) { 
    if (str.length() > 3) { 
     return (T) str.subSequence(0, 3); 
    } 
    return str; 
} 

Uwaga

CharSequence nie deklaruje żadnej metody substring, ale subSequence powinna zapewnić identyczną funkcjonalność.

-1

Było też jedno rozwiązanie wspomniano tutaj:

public static <T extends String, StringBuffer, StringBuilder> T substr3(
     T str) { 
    if (str.length() > 3) { 
     return (T) str.substring(0, 3); 
    } 
    return str; 
} 

zamiast &.

+1

Deklaruje 3 typy parametrów; jeden o nazwie 'T', jeden o nazwie' StringBuffer' i jeden o nazwie 'StringBuilder'. Używana jest tylko pierwsza, a ponieważ jej górna granica 'String' to' final', zawsze będzie to 'String'. –

Powiązane problemy