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

此操作失败并出现错误:

main3.java:15: error: no suitable constructor found for IntegerValue(T)
  static <T> IntegerValue integer (T value) { return new IntegerValue(value); }
                                                     ^
    constructor IntegerValue.IntegerValue(Integer) is not applicable
      (argument mismatch; T cannot be converted to Integer)
    constructor IntegerValue.IntegerValue(String) is not applicable
      (argument mismatch; T cannot be converted to String)
  where T is a type-variable:
    T extends Object declared in method <T>integer(T)
1 error

如何指定 T 的正确类型当调用通用 integer 时方法?

我也尝试过这个:

    IntegerValue c = main3.<Integer>integer (42);
    IntegerValue d = main3.<String>integer ("42");

但这并没有帮助。

最佳答案

只有 2 个可用于 IntegerValue 的构造函数:IntegerValue(Integer)IntegerValue(String)

因此,您想要的东西不可能。好吧,理论上你可以写:

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

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

相关文章:

java - FragmentStatePagerAdapter getItem 未调用

java - 尽管没有重叠,但 Mongo DuplicateKey 错误

java - Spring在条件类的子类中注入(inject)bean

java - 在我的文本应用程序中打开文本文件

java - 使用 java.lang.reflection 的构造函数的 AspectJ 切入点

java - JAVA 中的对象数组给出 InputMismatchException

java - JProfiler - "Run GC"按钮与堆快照的 "Perform full GC in heap snapshot"选项

java - 如何在android中为联系人添加新字段

java - 将每个动画 GIF 帧转换为单独的 BufferedImage

java - MediaStorage.Images.Thumbnails 在 API29 中已弃用。如何使用loadThumbnail()?