Java:如何检查泛型类类型定义?

标签 java generics types

这个想法是定义一个基类,它可以调用派生类中定义的方法,但在创建时我想确保,这些方法是完全根据要求定义的,即这些方法只接受一个参数,一个 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/

相关文章:

python - 为什么 pd.concat 将结果类型从 int 更改为 object?

java - 使用 java 8 流将 List<Staging<Importable>> 转换为 List<Staging<ImportableImpl>>

c# - 通用 View 模型编辑支持

java - 扩展泛型类时遇到问题

java - 无法使用 JAVA DatabaseMetaData 获取外键

python - 如何获取 @property getter/setter 的类型?

java - 如何从具有通用返回类型的方法返回实际实例

java - 根据字符的存在对字符串进行子串

java - GenericJDBCException 被 try/catch block 的错误部分捕获

java - 提交按钮后,用 TextView 替换 ratingBar?