当前位置: 首页 > 面试题库 >

获取通用类类型

孟雪风
2023-03-14
问题内容

嗨,Java中有什么方法可以获取静态通用类类型

我结束了构建

    List<TaskLocalConstraints> l = new ArrayList<TaskLocalConstraints>();
    Class<List<TaskLocalConstraints>> c = (Class<List<TaskLocalConstraints>>)l.getClass();

我想知道是否存在类似的东西:

    Class c = List<TaskLocalConstraints>.class;

(我真的不想构造新的对象只是为了获得其类型)

谢谢


问题答案:

由于所有List<something>类实际上在运行时都对应于同一类,因此可以这样做:

Class<List<TaskLocalConstraints>> c 
    = (Class<List<TaskLocalConstraints>>) List.class;

但是由于某种原因,Java不喜欢它。用String尝试过:

Laj.java:9: inconvertible types
found   : java.lang.Class<java.util.List>
required: java.lang.Class<java.util.List<java.lang.String>>
Class<List<String>> c = (Class<List<String>>) List.class;

好吧,那我们就傻了吧:

Class<List<String>> c = 
   (Class<List<String>>) (Class<?>) List.class;

这很愚蠢,但是有效。它会产生“未经检查”的警告,但是您的示例也是如此。请注意,尽管如此,它不会产生与您的示例相同的类。您的示例返回了对象的实际类,即ArrayList。这List显然是返回的。



 类似资料:
  • 问题内容: 我的课开始于 现在,我想在代码中的某处编写代码,但这是不可能的(就像还是现在)。 您能告诉我如何获得通用药吗? 问题答案: 您可以动态提供类型,但是编译器不会自动为您提供该类型。 顺便说一句:动态地获取它并非不可能,但这取决于如何使用它。例如 可以确定Arnie.class具有带有MuscleHero的Generic参数的超类。 在这种情况下,超类的通用参数就是这样。

  • 问题内容: 说我有一个像这样的父接口/类 还有许多实现通用类型的实现接口。 我可以使用反射来获取的情况下代表我有没有为对象。像这样: 目前,我已经作为参数传递了,但是如果可以的话,我想简化一些事情。 问题答案: 是的,尽管什么其他人说,这个信息 是 可用的,如果你有机会到子类对象。您需要与一起使用。 在您的示例中,“实际”类型参数应返回for 。

  • 问题内容: 使用泛型时,我在Java中有一个小问题。我有一堂课: 在方法中,我需要获取类型名称。有没有办法找到字符串使用? (如果创建了,我希望能够做到这一点- 我必须使用通用性,因为我的方法之一必须返回)。 这似乎很容易,但是我不知道如何去做。 问题答案: 由于 类型擦除, 您通常无法执行此操作-的实例不 知道 的类型。如果需要,一种方法是使用类型文字: 然后: 这很丑陋,但这就是类型擦除的作用

  • 问题内容: 我有; 有没有一种(简单的)方法来检索列表的通用类型? 问题答案: 如果这些实际上是某个类的字段,那么你可以在反射的帮助下获得它们: 你还可以对参数类型和方法的返回类型执行此操作。 但是,如果它们处于你需要了解它们的类/方法的同一范围之内,那么就没有必要了解它们,因为你已经自己声明了它们。

  • 问题内容: 我该如何实现? 到目前为止,我尝试过的所有操作始终返回类型,而不是所使用的特定类型。 问题答案: 正如其他人所提到的,只有在某些情况下才能通过反思来实现。 如果你确实需要类型,这是通常的(类型安全的)解决方法:

  • 问题内容: 我该如何实现? 到目前为止,我尝试过的所有操作始终返回类型,而不是所使用的特定类型。 问题答案: 正如其他人所提到的,只有在某些情况下才能通过反射来实现。 如果你确实需要类型,这是通常的(类型安全)解决方法: