Java Reflection getConstructor方法

7 java reflection inheritance extends getconstructor

让我们说我有课程,AB在哪里B扩展A.我也有一个B带有一个类型参数的构造函数A.我也有一个B叫做类型的对象bObj.

有没有办法调用B.class.getConstructor(new Class[] { bObj.getClass() })并获得构造函数,因为B扩展A?目前我正在得到一个NoSuchMethodException.

此致,斯坦

Urs*_*pke 7

我建议你看看ConstructorUtils来自Apache的百科全书郎.
他们拥有构造函数发现方法的所有方式.

您的案例应由" 匹配可访问的构造函数 " 涵盖.

以下是上下文中使用的方法的示例.基本上,你这样称呼它:

 private <T> T instantiate(Class<?> input, Object parameter) {
  try {
    Constructor<?> constructor = ConstructorUtils.getMatchingAccessibleConstructor(input, parameter.getClass());
    return (T) constructor.newInstance(parameter);
  } catch (Exception e) {
    //handle various exceptions
  } 
}
Run Code Online (Sandbox Code Playgroud)

  • 这完美无瑕,在我看来 - 非常优雅.另外两个提示:(1)如果将"input"参数声明为"Class <T> input",则可以防止转换返回值.(2)`ConstructorUtils.invokeConstructor(Class <T> cls,Object ... args)`结合获取构造函数和创建新实例. (3认同)