如果我要创建一个泛型的Java类,例如:
public class Foo<T>
如何才能内部确定该类,最后变成什么“ T”?
public ???? Bar()
{
//if its type 1
// do this
//if its type 2
// do this
//if its type 3
// do this
//if its type 4
// do this
}
我戳了一下Java
API并使用了反射的东西,instanceof,getClass,.class等,但是我似乎无法做出决定。我觉得我已经接近了,只需要合并多个电话,但会持续很短的时间。
更具体地说,我试图确定是否用3种可能的类型之一实例化了该类。
我在他的一些项目中使用了与他在此处解释的解决方案类似的解决方案,并发现它非常有用。
http://blog.xebia.com/2009/02/07/acessing-generic-types-at-runtime-in-
java/
它的关键是使用以下内容:
public Class returnedClass() {
ParameterizedType parameterizedType = (ParameterizedType)getClass()
.getGenericSuperclass();
return (Class) parameterizedType.getActualTypeArguments()[0];
}
问题内容: 我一直在尝试确定类中字段的类型。我已经看过所有自省方法,但还没有弄清楚该怎么做。这将用于从Java类生成xml / json。我在这里查看了许多问题,但没有找到我真正需要的东西。 例: 在封送该对象时,我需要知道该字段是类型的对象的列表,因此我可以正确地封送它。 我试过了 但是,这只会告诉我,这是一个,不是的小号 谢谢 问题答案: 看一看从Java Tutorial Trail中获取字
问题内容: 我正在创建一个通用类,并且需要使用一种方法来了解当前使用的通用类型的Class。原因是我调用的方法之一期望将此作为参数。 例: 显然,上面的示例不起作用,并导致以下错误:类型参数T的非法类文字。 我的问题是:有人知道这方面有很好的选择或解决方法吗? 问题答案: 仍然存在相同的问题:常规信息在运行时被删除,无法恢复。一种解决方法是在静态方法的参数中传递T类: 很难看,但是可以用。
问题内容: 我正在遍历Jar文件中的类,希望找到那些不是抽象的类。我可以通过实例化类并捕获InstantiationException来解决此问题,但是由于某些类的启动工作量很大,因此性能会受到影响。我在Class.java文档中找不到明显类似于isAbstract()的东西。 问题答案: 当您在类对象上调用getModifiers()时,它将抽象作为其修改器之一。 该链接应该有所帮助。 也: h
问题内容: 我有三个类(,和),它们扩展了另一个类()。如何判断对象属于哪个子类?到目前为止,我有一个具有类名称的属性,但是我认为可以使用类似于javascript的typeof的运算符。(类似:) 问题答案: 您可以使用关键字。 但是请注意,需要使用它通常是不良设计的标志。通常,您应该在每个派生类中编写方法覆盖,以便您无需显式地检查是哪个类。
问题内容: 如果class 和class 扩展了class 并且我有一个对象类型或,我如何确定它是实例的哪种类型? 问题答案:
问题内容: 给定具有以下结构的类。我试图确定由泛型方法的调用者分配的参数T的类型。 在C#中,我将使用“ default(T)”或“ typeof(T)”,但我试图在Java中执行此操作。谁知道/如何做?我真的不需要实例,我只需要Class定义。 问题答案: 你不能那样做。您可以做的是使方法签名如下: 然后,您可以使用给定的类检查类型。