Java 调用静态方法时如何指定泛型类型?
我举了以下例子:Java 调用静态方法时如何指定泛型类型?,java,Java,我举了以下例子: public class main3 { static class Value<T> { T value; Value (T value) { this.value = value; } } static class IntegerValue extends Value<Integer> { IntegerValue (Integer value) { super (value); } Integer
public class main3
{
static class Value<T>
{
T value;
Value (T value) { this.value = value; }
}
static class IntegerValue extends Value<Integer>
{
IntegerValue (Integer value) { super (value); }
IntegerValue (String value) { super (Integer.valueOf (value)); }
}
static <T> IntegerValue integer (T value) { return new IntegerValue(value); }
public static void main (String ...argv)
{
IntegerValue a = new IntegerValue (42);
IntegerValue b = new IntegerValue ("42");
IntegerValue c = integer (42);
IntegerValue d = integer ("42");
}
}
但是它没有帮助。只有两个构造函数可用于
IntegerValue
:IntegerValue(Integer)
和IntegerValue(String)
因此,你想要的是不可能的。理论上你可以写:
static <T extends Integer> IntegerValue integer(T value) { ... }
再看看你的代码。你想使用一个泛型T,对于一个类。。。这并没有提供一个泛型的T。你为什么希望它首先起作用?@GhostCat这个方法是泛型的,而不是类。这两个方法只是类型不同而已。为什么不可能通过使用类型变量来统一它们呢?我必须写半本书来深入研究细节,并深入研究25年的历史,了解为什么会发生这种情况。结论是事实并非如此。
static <T extends Integer> IntegerValue integer(T value) { ... }
static IntegerValue integer(String value) { return new IntegerValue(value); }
static IntegerValue integer(Integer value) { return new IntegerValue(value); }