如何返回与使用Java 6传入的类相同类型的对象的实例?
我想返回一个传入的Class对象的相同类型对象的实例。传入的类型可以是ANYTHING。 有没有办法用generics做到这一点?
澄清 – 我不希望方法的调用者不必转换为他们传入的对象的类
例如,
public Object getObject(Class class) { // Construct an instance of an object of type Class return object; } // I want this: MyClass myObj = getObject(MyClass.class); // Not this (casting): MyClass myObj = (MyClass)getObject(MyClass.class);
我假设您要创建该类的新实例。 这不可能使用generics(你不能调用new T()
),并且使用reflection也会非常有限。
反思方法可以是:
//class is a reserved word, so use clazz public T getObject(Class clazz) { try { return clazz.newInstance(); } catch( /*a multitude of exceptions that can be thrown by clazz.newInstance()*/ ) { //handle exception } }
请注意,这仅在类具有无参数构造函数时才有效。
但是,问题在于你需要它而不仅仅是调用
new WhatEverClassYouHave()
。
public C getObject(Class c) throws Exception { return c.newInstance(); }
用法示例:
static C getObject(Class c) throws Exception { return c.newInstance(); } static class Testing { {System.out.println("Instantiated");} void identify(){ System.out.println("Invoked"); } } public static void main(String args[]) throws Exception { Testing t = getObject(Testing.class); t.identify(); }
如果你在创作过程中没有尝试对象做任何事情,那么使用一个好的老式构造函数有什么不对?
你应该可以使用类似的东西:
public T getObject(T obj) { return obj.newInstance(); }
您不必实现此方法,它已经存在:
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#newInstance%28%29
用法:
Class type = ...; T instance = type.newInstance();
public Object getObject(Class clazz) { return clazz.newInstance(); }
将创建指定类的新对象。 您不必为此使用generics。