如何返回与使用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。