作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这个想法是定义一个基类,它可以调用派生类中定义的方法,但在创建时我想确保,这些方法是完全根据要求定义的,即这些方法只接受一个参数,一个 HashMap <String String
>.
到目前为止,我能够使用以下代码检查该方法是否仅包含一个参数并且它属于 HashMap 类,但是我如何检查通用定义是否为 <String, String
> ?
public boolean isMethodParameterValid(final Method method) {
final Class<?>[] parameters = method.getParameterTypes();
return ((parameters.length == 1) && parameters[0].isAssignableFrom(HashMap.class));
}
最佳答案
确实存在类型删除,但它不适用于变量/字段 - 仅适用于类型参数被删除并替换为其上限的类的定义。
这意味着您所要求的可以实现。以下是检查方法第一个参数的通用参数的方法:
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()));
}
关于Java:如何检查泛型类类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461106/
我是一名优秀的程序员,十分优秀!