2011-07-18 58 views
0

在本例中,asString()調用不編譯。 (另外:調用toString()不會編譯,但我需要自定義。)如何調用asString或任何通用類型的方法,因爲實際上已經爲每個可能的方法提供了方法T?不需要的新方法 -如何在Java中調用泛型類型的方法?

class Range<T> 
{ 
    private T min; 
    private T max; 

    Range(T min, T max) 
    { 
     this.min = min; 
     this.max = max; 
    } 

    String makeString() 
    { 
     return "The range is from " + min.asString() + " to " + max.asString(); 
    } 
} 

回答

4

您需要提供已asString方法定義的接口,例如:

interface AsStringable { 
    String asString(); 
} 

然後這樣定義你的類:

class Range<T extends AsStringable> 
{ 
    private T min; 
    private T max; 

    Range(T min, T max) 
    { 
     this.min = min; 
     this.max = max; 
    } 

    String makeString() 
    { 
     return "The range is from " + min.asString() + " to " + max.asString(); 
    } 
} 
0

事實上,你可以通過覆蓋在你的類定製toString()

關於你的代碼:編譯器應該知道你所知道的 - 即那個T將總是有一個給定的方法。目前,你只是告訴它,有T這是任何Object。如果僅限於Foo定義asString()亞型,然後用<T extends Foo>

public interface Foo { 
    String asString(); 
} 

public class Range<T extends Foo> { .. } 
相關問題