我不知道如何使用类类型作为参数

时间:2018-04-01 19:36:53

标签: java interface type-parameter getconstructor

所以我正在创建一个插件插件,但这并不是那么重要。

我有一个选择类,用于保存有关x,z,宽度,深度内容的2D区域的信息。在某个点上,矩形或椭圆将填充到该选择中。我的Ellipse和Rectangle类实现了一个接口 Shape

在选择的构造函数I中,我想确定以后使用的形状的类型。我的第一个想法是传递类类型

public Selection(Class<Shape> shapeType) {

所以我之后可以创建该类的对象

Constructor<Shape> cons = shapeType.getConstructor(//Well I also don't know what belongs here);
Shape s = cons.newInstance(this);

最后我得到了一个N​​ullpointerException,因为Shape接口没有构造函数。

我很困惑。我应该将Shape接口更改为抽象类,还是只在构造函数中传递一些内容,如 ELLIPSE RECTANGLE ?有人知道我能做什么吗?

先谢谢Mighty One

1 个答案:

答案 0 :(得分:5)

不要这样做。

你要做的就是传递给我一个东西的东西&#34;。你实际传入的是&#34;一种可以访问给你东西的东西的东西。

通过类,您可以访问零个或多个构造函数;它不能保证您可以使用特定参数调用它来为您提供实例。您使用反射找到的问题是您无法保证构造函数的存在。

采取更简单的方法:传入Supplier<? extends Shape>,例如Rectangle::new() -> new Ellipse(10, 20)。在编译时检查这一点以确保构造函数存在。