Java:如何创建具有;“类”;对象

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

你好

在类a中有一个“类”类型的数据成员,我在构造函数中初始化它。然后我想创建这个类的对象(实例)。怎么做

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
。你需要看看泛型。“对象”解决了我的问题。也许这是一个坏习惯,但它是有效的。