【发布时间】:2020-06-10 20:37:53
【问题描述】:
在 Java 中(或在 Java 库中)是否有任何方法可以从 Class 中获取 Constructor,这将为给定的参数/参数类型调用(不需要精确的参数和参数类型匹配,而是包括超类型)?
即我知道Class#getConstructor(Class<?>),但这只会返回完全匹配。
例如,下面的代码会抛出一个NoSuchMethodException,而我想为A(CharSequence) 获取Constructor,因为如果我跑了就会调用它,例如A(""):
public class A {
public A(Object o) {}
public A(CharSequence cs) {}
public static void main(String[] args) throws Exception {
Constructor c = A.class.getConstructor(String.class);
c.newInstance("");
}
}
我想这样的方法也可能会抛出一个异常,表明多个构造函数匹配,所以如果没有更具体的参数类型(比如通过显式强制转换),它就无法选择。
我也想为Methods 找到这个功能。
谢谢。
【问题讨论】:
-
您可以将
""投射到您要使用的对象上。除此之外,我认为没有好的做法。 -
您可以致电
getConstructors(),然后应用您想要选择其中之一的任何逻辑。 -
@DavidConrad 同意。我也想过使用
getConstructors()来做到这一点,但是我必须学习并复制确切的Java参数到参数匹配规则,如果其他人已经这样做了,我宁愿不这样做,最好在 JRE 或常用库中。 -
@MichaelBianconi 我的问题是我有一个方法,该方法将
Class实例化& 构造函数参数作为其参数。我事先不知道Class有哪些构造函数,哪些是参数的超类型。我需要一些代码来检查Class& 参数来解决这个问题。 -
完成创建对象的整个任务(不仅仅是获取构造函数)的简单方法是使用
java.beans.Expression。它遵循与编译器相同的类型推断规则。
标签: java reflection constructor