Java:如何创建具有;“类”;对象
你好 在类a中有一个“类”类型的数据成员,我在构造函数中初始化它。然后我想创建这个类的对象(实例)。怎么做Java:如何创建具有;“类”;对象,java,class,generics,Java,Class,Generics,你好 在类a中有一个“类”类型的数据成员,我在构造函数中初始化它。然后我想创建这个类的对象(实例)。怎么做 import java.lang.reflect.InvocationTargetException; public class runMe { public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccess
import java.lang.reflect.InvocationTargetException;
public class runMe {
public static void main(String[] args) throws NoSuchMethodException,
InstantiationException, IllegalAccessException, InvocationTargetException {
String testStr = "XXX";
testClass cls = new testClass(testStr.getClass());
cls.createInstance();
}
}
import java.lang.reflect.InvocationTargetException;
public class testClass {
Class<?> myClass;
testClass(Class inputClass) {
this.myClass = inputClass;
}
void createInstance() throws NoSuchMethodException,
InstantiationException, IllegalAccessException, InvocationTargetException {
myClass.getDeclaredConstructor().newInstance(); // this works
//QUESTION, how to do something like this (and return, in this example a String):
myClass anInstance = myClass.getDeclaredConstructor().newInstance();
}
}
import java.lang.reflect.InvocationTargetException;
公共类运行库{
公共静态void main(字符串[]args)抛出NoSuchMethodException,
实例化异常、IllegaAccessException、InvocationTargetException{
字符串testStr=“XXX”;
testClass cls=新的testClass(testStr.getClass());
createInstance();
}
}
导入java.lang.reflect.InvocationTargetException;
公共类testClass{
类myClass;
testClass(类inputClass){
this.myClass=inputClass;
}
void createInstance()引发NoSuchMethodException,
实例化异常、IllegaAccessException、InvocationTargetException{
myClass.getDeclaredConstructor().newInstance();//这很有效
//问题,如何执行类似操作(在本例中,返回字符串):
myClass anInstance=myClass.getDeclaredConstructor().newInstance();
}
}
您想要的是使您的测试类成为通用类。您可以使用类型参数作为anInstance
的数据类型,以及inputClass
类类型的类型参数:
class testClass<T> {
Class<T> myClass;
testClass(Class<T> inputClass) {
this.myClass = inputClass;
}
void createInstance() throws NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {
T anInstance = myClass.getDeclaredConstructor().newInstance();
}
}
class测试类{
类myClass;
testClass(类inputClass){
this.myClass=inputClass;
}
void createInstance()抛出NoSuchMethodException、InstanceionException、,
IllegaAccessException,InvocationTargetException{
T anistance=myClass.getDeclaredConstructor().newInstance();
}
}
很可能您希望将T
限制为某些类型,因此您可能也希望使其有界。您的antance
变量需要具有正确的类型或最不特殊的超类类型,即Object
。你需要看看泛型。“对象”解决了我的问题。也许这是一个坏习惯,但它是有效的。