如何在java中获得java.lang.reflect.Type的简单名称 公共字符串getSimpleName(类型){ //怎么做? }
我无法控制传递到如何在java中获得java.lang.reflect.Type的简单名称 公共字符串getSimpleName(类型){ //怎么做? },java,Java,我无法控制传递到getSimpleName(Type)的变量,除非它是Type的实例 当然,我知道我可以在下面的示例中使用p.getType().getSimpleName(),但是解决下面的exmaple问题并不重要。我想从中说明的是,如果用户(我无法控制)通过p.getParameterizedType()调用getSimpleName(Type),他仍然可以得到正确的结果(即列表) 非常感谢。您可以使用和方法 输出: List 有两种方法可以从类型中获取所需内容 将Type对象强制转换为
getSimpleName(Type)
的变量,除非它是Type
的实例
当然,我知道我可以在下面的示例中使用p.getType().getSimpleName()
,但是解决下面的exmaple问题并不重要。我想从中说明的是,如果用户(我无法控制)通过p.getParameterizedType()
调用getSimpleName(Type)
,他仍然可以得到正确的结果(即列表)
非常感谢。您可以使用和方法
输出:
List
有两种方法可以从
类型
中获取所需内容
Type
对象强制转换为ParameterizedType
并在其上调用getRawType
import java.lang.reflect.*;
import java.util.List;
public class App {
public static void main(String[] args) throws NoSuchMethodException {
final Method m = App.class.getMethod("foo", List.class);
final Parameter p = m.getParameters()[0];
System.out.println(((ParameterizedType) p.getParameterizedType()).getRawType());
}
public void foo(List<String> strings){
}
}
import java.lang.reflect.*;
导入java.util.List;
公共类应用程序{
公共静态void main(字符串[]args)引发NoSuchMethodException{
最终方法m=App.class.getMethod(“foo”,List.class);
最终参数p=m.getParameters()[0];
System.out.println(((ParameterizedType)p.getParameterizedType()).getRawType());
}
公共void foo(列表字符串){
}
}
输出“interface java.util.List”。不完全是你想要的,但更接近
“java.util.List”
中提取所需的名称
但正如@deadshot所指出的,您可以使用
getType()
获取参数的类
,然后通过类
API获取该类的名称。这是否回答了您的问题?不。这得到的是参数的类型,而不是泛型类型。令人惊讶的是type.getTypeName()
?我不能限制传递到公共字符串getSimpleName(type类型)
中的变量,除了它是类型的实例不确定它是否得到保证(可能没有),但在这种情况下,它显示为parameteredType\getRawType()
返回类的实例,这意味着可以直接使用getSimpleName()。
System.out.println(p.getType().getSimpleName());
List
import java.lang.reflect.*;
import java.util.List;
public class App {
public static void main(String[] args) throws NoSuchMethodException {
final Method m = App.class.getMethod("foo", List.class);
final Parameter p = m.getParameters()[0];
System.out.println(((ParameterizedType) p.getParameterizedType()).getRawType());
}
public void foo(List<String> strings){
}
}