我们的想法是定义一个可以调用在开发类中定义的方法的基类,但是在创建时我要确保这样的方法完全根据需求定义,即方法只接受一个参数,HashMap
到目前为止,我能够使用以下代码检查该方法是否只包含一个参数,并且它是Class HashMap,但是如何检查通用定义是
public boolean isMethodParameterValid(final Method method) { final Class>[] parameters = method.getParameterTypes(); return ((parameters.length == 1) && parameters[0].isAssignableFrom(HashMap.class)); }
Itay Maman.. 12
实际上,存在类型擦除但它不适用于变量/字段 - 仅适用于类型params被擦除并被其上限替换的类的定义.
这意味着您可以实现所要求的.以下是如何检查方法的第一个参数的通用参数:
class Z { public void f(Listlst) { } } ... Method m = Z.class.getMethod("f", List.class); Type t = m.getGenericParameterTypes()[0]; if(t instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) t; System.out.println("Generic params of first argument: " + Arrays.toString(pt.getActualTypeArguments())); }
Dave Ray.. 7
你不能.Java泛型类型由编译器"擦除",即HashMap
变为HashMap
运行时.看到这个问题.
实际上,存在类型擦除但它不适用于变量/字段 - 仅适用于类型params被擦除并被其上限替换的类的定义.
这意味着您可以实现所要求的.以下是如何检查方法的第一个参数的通用参数:
class Z { public void f(Listlst) { } } ... Method m = Z.class.getMethod("f", List.class); Type t = m.getGenericParameterTypes()[0]; if(t instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) t; System.out.println("Generic params of first argument: " + Arrays.toString(pt.getActualTypeArguments())); }
你不能.Java泛型类型由编译器"擦除",即HashMap
变为HashMap
运行时.看到这个问题.