java - getDeclaredConstructor 找不到以接口(interface)作为参数的构造函数

标签 java reflection

我有一个界面

public interface IDrawing

接下来我有一个实现此接口(interface)的类:

public class Line implements IDrawing

现在我有一个类,它的构造函数接受上面的参数:

public LineChanger(Line line)

没有问题。

当我使用反射调用上面的构造函数时,它抛出 NoSuchMethodException

//drawing variable is of class Line implementing IDrawing
.getDeclaredConstructor(IDrawing.class).newInstance(drawing);

当我将构造函数更改为:

public LineChanger(IDrawing line)

是否可以在不更改构造函数的情况下使反射工作?

我希望保持构造函数严格(即在本例中仅接受一个特定类 Line),但保持反射对我的工厂有效。

最佳答案

如果您遍历所有构造函数并找到一个具有可从 IDrawing 分配的参数的构造函数,则可以按照您想要的方式进行操作。

    Constructor ctor = Arrays.stream(LineChanger.class.getConstructors())
            .filter(c -> c.getParameterCount() == 1)
            .filter(c -> c.getParameterTypes()[0].isAssignableFrom(IDrawing.class))
            .findFirst()
            .orElse(LineChanger.class.getConstructors()[0]);

关于java - getDeclaredConstructor 找不到以接口(interface)作为参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46786870/

相关文章:

Java执行.exe文件

c# - 如何从 C# 获取 COM 组件的 ProgID?

java - 如何使 2 个整数相除产生一个 float 而不是另一个整数?

java - Tomcat 6.0.35 和 Java 8

java - 在java中继承时出现重载错误?

Java 应用程序内存使用情况

java - 将函数传递给 PoolThread

java - java方法接受null类数组的kotlin反射

ruby-on-rails - 如何从 Rails 的 Controller 中访问路由信息(HTTP 动词、 Action 名称等...)?

java - 记录实例的任何方法调用