2015-01-20 58 views
1

我有以下问题: 我有一个类对象(MyClass.class),并从该类对象我需要实例化一个对象。这是容易的部分ois MyClass.class.getDeclaredConstructor().newInstance()(该类只有一个构造函数,它没有参数) 。如何通过使用类对象实例化一个类并仅通过使用它实例化的类来转换结果?

棘手的部分(或者我认为)是使用我创建的类对象将结果对象转换为适当类型(MyClass)。 请注意,我不能写下面的代码(MyClass)MyClass.class.getDeclaredConstructor().newInstance()

如果有人可以帮助我,这将不胜感激。

+3

铸造是关于编译时的类型。如果你只有一个'Class'对象,那么你就没有编译时类型。你想解决什么问题? – SLaks 2015-01-20 21:40:59

+0

public void function(Class c){(我该如何施放它?)c.getDeclaredConstructor()。newInstance(); } – Carolik 2015-01-20 21:42:47

+0

你不能,也不代表任何事情。 – SLaks 2015-01-20 21:49:39

回答

1

写:

MyClass.class.cast(myInstance); 

See also the relevant Javadoc。不,这将是非常从零检查和类型检查除了有用:

public T cast(Object obj) { 
    if (obj != null && !isInstance(obj)) 
     throw new ClassCastException(cannotCastMsg(obj)); 
    return (T) obj; 
} 

...但是这是你使用反射怎样投一类,我怀疑这个问题是关于一些测试或转让无论如何

+0

他只是调用'newInstance()',所以不会有任何好处。 – SLaks 2015-01-20 21:50:03

+0

问题是我调用getDeclaredConstructors()并从那里调用newInstance()给了我一个对象,但无论如何,你的答案是我需要的。谢谢! – Carolik 2015-01-20 22:00:10

+0

@Carolik:啊哈,但你知道你可以简单地通过'Class.newInstance()'调用默认构造函数,如果它是公共的? – 2015-01-20 22:01:55