如何在Java中调用泛型类型的方法?

时间:2011-07-18 11:05:28

标签: java generics

在此示例中,asString()调用不会编译。 (旁白:调用toString()确实编译但我需要自定义。)我如何调用asString或泛型类型的任何方法,因为实际上已为每个可能的T提供了该方法?

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();
    }
}

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

事实上,您可以通过在班级中覆盖{ - 1}}来自定义{ - 1}} - 无需新方法。

关于你的代码:编译器应该知道你所知道的 - 即toString()总是有一个给定的方法。目前,您只告诉它TT。如果仅限于Object定义Foo的子类型,请使用asString()

<T extends Foo>