Jus*_*Web 1 java interface getconstructor type-parameter
所以我正在创建一个插件插件,但这并不是那么重要.
我有一个Selection类,它保存有关x,z,宽度,深度内容的2D区域的信息.在某个点上,矩形或椭圆将填充到该选择中.我的Ellipse和Rectangle类实现了一个接口Shape.
在Selection的consturctor中,我想确定以后使用的形状的类型.我的第一个想法是传递类类型
public Selection(Class<Shape> shapeType) {
Run Code Online (Sandbox Code Playgroud)
所以我之后可以创建该类的对象
Constructor<Shape> cons = shapeType.getConstructor(//Well I also don't know what belongs here);
Shape s = cons.newInstance(this);
Run Code Online (Sandbox Code Playgroud)
最后我得到了一个NullpointerException,因为Shape接口没有构造函数.
我很困惑.我应该将Shape接口更改为抽象类,还是只在构造函数中传递一些像ELLIPSE和RECTANGLE这样的int ?有人知道我能做什么吗?
在此先感谢Mighty One
不要这样做.
你要做的就是传递"给我一件事的东西".你实际传递的是"一种可以访问给你东西的东西的东西".
Class允许您访问零个或多个构造函数; 它不保证您可以使用特定参数调用它来为您提供实例.您使用反射找到的问题是您无法保证构造函数的存在.
采取更简单的方法:传入a Supplier<? extends Shape>,例如Rectangle::new或() -> new Ellipse(10, 20).在编译时检查这一点以确保构造函数存在.