2011-07-18 57 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> { .. } 
相关问题