Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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_Generics_Reflection - Fatal编程技术网

如何使用反射识别java方法是否是泛型的?

如何使用反射识别java方法是否是泛型的?,java,generics,reflection,Java,Generics,Reflection,如何使用反射检查示例代码中的getQueue是否为泛型?。一种方法是遍历参数类型和返回类型,并检查它们是否是TypeVariable的实例。我在找更简单的 Class SomeClass { <V> Queue<V> getQueue(); } 您不需要查找方法的参数类型或返回类型来标识是否具有类型参数,因为类方法具有返回类型参数数组的方法getTypeParameters 下面是一个显示此方法使用的示例。我还展示了另外两种方法的使用,因为术语令人难以置信地困惑 pu

如何使用反射检查示例代码中的getQueue是否为泛型?。一种方法是遍历参数类型和返回类型,并检查它们是否是TypeVariable的实例。我在找更简单的

Class SomeClass {
 <V> Queue<V> getQueue();
}

您不需要查找方法的参数类型或返回类型来标识是否具有类型参数,因为类方法具有返回类型参数数组的方法getTypeParameters

下面是一个显示此方法使用的示例。我还展示了另外两种方法的使用,因为术语令人难以置信地困惑

public class SomeClass {

    <V, U> Queue<V> someMethod(String str, int a, List<U> list) {
        return null;
    }

    public static void main(String[] args) throws Exception {
        Method method = SomeClass.class.getDeclaredMethod("someMethod", String.class, int.class, List.class);

        TypeVariable<Method>[] typeParameters = method.getTypeParameters();
        System.out.println(typeParameters.length);                          // Prints "2"
        System.out.println(typeParameters[0].getName());                    // Prints "V"

        Class<?>[] parameterTypes = method.getParameterTypes();
        System.out.println(Arrays.toString(parameterTypes));                // Prints [class java.lang.String, int, interface java.util.List]

        Type[] genericParameterTypes = method.getGenericParameterTypes();
        System.out.println(genericParameterTypes[2].getTypeName());         // Prints java.util.List<U>
    }
}

由于类型擦除,您不能。请记住,有一个类——与C++模板不同——所以,对于你的反射应该做什么?我正在尝试获取类/方法的元数据。我不是在研究类/方法的特定用法。我猜擦除只适用于泛型的使用。