2014-10-17 3 views
5

Ich weiß, dass es überhaupt keinen Sinn hat, aber es ist nur mein Experiment. Es gibt 3 Arten (wie ich weiß), die Methode subString() unterstützt. Ich wan't eine generische Methode wie folgt zu machen:Java - generische Methode mit begrenzten Typen für 3 ähnliche Typen: 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; 
    } 

Es wird nicht so kompilieren, weil Sie so viele Schnittstellen verwenden können, wie Sie benötigen, aber nur eine Klasse als begrenzt Typ. Diese Methode sollte für diese 3 Typen funktionieren: String, StringBuilder, StringBuffer, aber die Frage ist: Wie setzt man diese 3 Typen als beschränkte Typen?

Antwort

12

Warum nicht einfach extend CharSequence?

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

Hinweis

CharSequence erklären keine substring Methode, aber subSequence die gleiche Funktionalität bieten sollte.

-1

Es gab auch eine Lösung, die hier erwähnt:

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

, statt &.

+1

Das erklärt 3 Typ-Parameter; eine mit dem Namen "T", eine mit dem Namen "StringBuffer" und eine mit dem Namen "StringBuilder". Nur die erste wird verwendet und da die obere Grenze "String" ist "final", wird es immer "String" sein. –