我们的想法是定义一个可以调用在开发类中定义的方法的基类,但是在创建时我要确保这样的方法完全根据需求定义,即方法只接受一个参数,HashMap <String String> .
到目前为止,我能够使用以下代码检查该方法是否只包含一个参数,并且它是Class HashMap,但是如何检查通用定义是<String, String>?
public boolean isMethodParameterValid(final Method method) {
final Class<?>[] parameters = method.getParameterTypes();
return ((parameters.length == 1) && parameters[0].isAssignableFrom(HashMap.class));
}
Run Code Online (Sandbox Code Playgroud)
Ita*_*man 12
实际上,存在类型擦除但它不适用于变量/字段 - 仅适用于类型params被擦除并被其上限替换的类的定义.
这意味着您可以实现所要求的.以下是如何检查方法的第一个参数的通用参数:
class Z
{
public void f(List<String> lst) { }
}
...
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()));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19135 次 |
| 最近记录: |