2014-10-17 11 views
5

Tôi biết nó có thể không có ý nghĩa gì cả, nhưng nó chỉ là thử nghiệm của tôi. Có 3 kiểu (như tôi biết) có hỗ trợ phương thức subString(). Tôi không thể tạo ra một phương pháp chung như thế này:Java - phương pháp chung với các loại bị chặn cho 3 loại tương tự: 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; 
    } 

Nó sẽ không biên dịch như thế này, bởi vì bạn có thể sử dụng nhiều giao diện tùy thích, nhưng chỉ có một loại như loại giới hạn. Phương pháp này sẽ làm việc tốt cho 3 loại này: String, StringBuilder, StringBuffer nhưng các câu hỏi là: làm thế nào để thiết lập 3 kiểu này là các kiểu bị chặn?

Trả lời

12

Tại sao không đơn giản là extend CharSequence?

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

Note

CharSequence không tuyên bố bất kỳ phương pháp substring, nhưng subSequence nên cung cấp các chức năng giống hệt nhau.

-1

Ngoài ra còn là một giải pháp đề cập ở đây:

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

, thay vì &.

+1

Điều đó tuyên bố 3 loại thông số; một tên có tên 'T', có tên là' StringBuffer' và có tên là 'StringBuilder'. Chỉ cái đầu tiên được sử dụng và kể từ khi giới hạn trên của nó 'Chuỗi' là' cuối cùng', nó sẽ luôn luôn là 'Chuỗi'. –

Các vấn đề liên quan