Java 如何从方法';s型参数?

Java 如何从方法';s型参数?,java,generics,reflection,Java,Generics,Reflection,我有一个类型参数化方法,但我不能对类型参数化参数调用getClass,因为它可以是null,所以我看到的唯一解决方案是从类型参数本身获取Class,不知何故: public <T> Class myMethod(T obj) { //can't do this: return obj.getClass() because null is permitted. } 公共类myMethod(T obj) { //无法执行此操作:返回obj.getClass(),因为允许null

我有一个类型参数化方法,但我不能对类型参数化参数调用
getClass
,因为它可以是
null
,所以我看到的唯一解决方案是从类型参数本身获取
Class
,不知何故:

public <T> Class myMethod(T obj)
{
    //can't do this: return obj.getClass() because null is permitted.
}
公共类myMethod(T obj)
{
//无法执行此操作:返回obj.getClass(),因为允许null。
}
这个方法简单地说明了这个问题。我的实际方法甚至不返回参数的类,而是以不同的方式使用它。问题的核心是:是否有一种方法可以获得表示方法参数的参数化类型的
对象,而不使用
obj.getClass()
(因为如果obj是
null
,我仍然需要知道调用方法的类型参数,例如:
myMethod(null)
必须返回
java.lang.String
类对象)

编辑这不是上述问题的重复,因为我的类没有参数化,只有我的方法

问题的核心是:是否有方法获取表示方法参数的参数化类型的
对象[…]


否。
Class
不包含有关类型参数值的任何信息<代码>类
仅包含有关类的定义的数据,而不包含有关类型使用的数据。事实上,由于类型擦除(请参见(方法)和(类型)),您无法获得有关类型参数的此类信息。

解决方案是将方法重构为:

public <T> Class<T> myMethod(Class<T> theClass, T obj)
    // other stuffs
    return theClass;
}
公共类myMethod(类的类,T对象)
//其他东西
返回类;
}
但是打电话的人已经知道T是什么,所以真正的问题是,你为什么需要它


=>社区维基

你不能,句号。这是为了告诉你什么是
getClass()
不会的?@chrylis这个方法就是一个例子。我的实际方法不是那样的。我只是把问题简化到了核心:我需要知道一个对象的类可能是空的。可能的重复以及
信息从哪里来?没有“创建运行时方法”。我现在明白了。编译器完全不保留任何信息。谢谢你,这回答了我的问题这是我试图避免的方法。我将把我的方法重构为
classmymethod(classcls,objectobj)
参数
obj
在这里是无用的,因为它从未被使用过。该方法通常也很无用,因为它只返回一个参数,所以为什么不直接使用传递的参数而不是调用该方法?@newacct“other stuff”