如何在Java中调用泛型类型的方法?
问题描述:
在本例中,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();
}
}
答
您需要提供已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();
}
}
答
事实上,你可以通过覆盖在你的类定制toString()
。
关于你的代码:编译器应该知道你所知道的 - 即那个T
将总是有一个给定的方法。目前,你只是告诉它,有T
这是任何Object
。如果仅限于Foo
定义asString()
亚型,然后用<T extends Foo>
public interface Foo {
String asString();
}
public class Range<T extends Foo> { .. }