在此示例中,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();
}
}
答案 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()
总是有一个给定的方法。目前,您只告诉它T
是T
。如果仅限于Object
定义Foo
的子类型,请使用asString()
<T extends Foo>