Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用静态方法时如何指定泛型类型?_Java - Fatal编程技术网

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