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

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

最佳答案

您需要提供一个定义了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();
    }
}

关于java - 如何在Java中调用泛型类型的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6731956/

10-09 19:48