Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中获得java.lang.reflect.Type的简单名称 公共字符串getSimpleName(类型){ //怎么做? }_Java - Fatal编程技术网

如何在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){
        }
    }