我有一个界面
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/