代码之家  ›  专栏  ›  技术社区  ›  Milhous

Java中的泛型方法,确定类型

  •  0
  • Milhous  · 技术社区  · 17 年前

        public <T> T getT()
        {
            Object t = null;
            Class<?> c = t.getClass();
            System.out.println(c.getName());
            return (T) t;
        }
    

    在Java中,有没有办法确定运行时T的类型?

    3 回复  |  直到 17 年前
        1
  •  5
  •   Michael Aaron Safyan    17 年前

    函数将抛出NullPointerException,因为您对空指针调用“getClass”(因为t是用null初始化的)。此外,泛型用于提供额外的编译时类型检查。它们在运行时不会给你任何特别的东西;泛型只是使用类型对象,但会导致使用泛型对象的代码执行隐式强制转换,并使编译器知道您将如何使用它。

        2
  •  1
  •   Tom Hawtin - tackline    17 年前

    在问题示例中,不能保证 T

    List<? extends Frogs> list = thing.getT();
    

    如果您真的想走这条路(我强烈建议您不要这样做,我并不希望您注意到),那么您可以提供一个与泛型参数静态相关的反射对象作为参数:

     public <T> T getT(Class<T> clazz) {
         Object value = map.get(clazz);
         return clazz.cast(value);
     }
    
        3
  •  0
  •   Janusz Daniel Rindt    17 年前

    如果你有一个泛型类,你可以编写一个构造函数来接受这个类型并将它保存到你的类的一个成员中。这样可以在运行时检查类型。编译之后,只有泛型中的所有信息都消失了。