是否可以基于泛型类型创建新对象。例如,我有几个自定义对象,我想调用一个泛型方法,该方法基于该泛型类型创建一个新对象。
public static void main(String[] args) {
Customer cust = myObject("str");
Vendor vend = myObject("str");
...
}
public static <T> T myObject(String str) {
return new T(str);
}
我读了几本书,我知道,你不能那样做,但我无法使它起作用。例如,我已经尝试过,type.isInstance(str)
但是我的编辑说,我不应该使用它,并且它实际上是行不通的。那么应该怎么做呢?
我不知道为什么要通过通用的通用方法创建不同类型的对象。对我来说,它闻起来像是一个不好的设计。
话虽如此,您可以通过以下方式实现它:
public static <T> T myObject(Class<T> type, String str)
throws InstantiationException, IllegalAccessException,IllegalArgumentException,
InvocationTargetException, NoSuchMethodException, SecurityException
{
return type.getDeclaredConstructor(String.class).newInstance(str);
}
您会看到,上面的方法接收到一个Class
参数,因此它知道新创建的对象应该属于哪个类。该方法首先获取可以接受一个String
参数的构造函数。然后,调用构造函数以实际创建对象。
您会发现,getDeclaredConstructor
和newInstance
方法可能会引发许多不同的异常。因此,您将需要通过一些try / catch代码来处理这些异常。(为简便起见,我在此处的代码中省略了此步骤,仅添加了一个throws
声明。)这引起了有关此方法设计的一些危险信号。
上面的方法将像这样使用:
public static void main(String[] args) throws Exception
{
Customer customer = myObject(Customer.class, "str");
Vendor vendor = myObject(Vendor.class, "str");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句