比如说下面这段代码,想要在Demo内部直接实例化一个E类型的对象。
以前我会通过获取范型的真实类型,然后通过Class<?>.newInstance()
方法来实例一个对象,但是这本身也是有风险的,因为范型类型本身就是作为类型参数让调用者传入的,它可能有很多构造方法,那我们该通过那个构造方法来实例化呢?如果直接使用默认的构造方法是否符合调用者的需求呢?
所以我觉得更好的实现是提供一个类似工厂方法的接口,让调用者自己完成范型类型的实例化,这里为了简便就使用Java中已经定义好的Supplier接口作为工厂接口。
这样在调用时就需要调用者把创建范型类型的接口实现,具体代码如下
如果和上面一样仅仅是创建无参数的Rectangle对象,可以更简单一点实现。
内容