3 回答
TA贡献1943条经验 获得超7个赞
1)没有类型信息:
public static Class<?> myMethod(String text, Class<?> clazz) {
// body
return clazz;
}
客户端代码:
public static void main(String[] args) {
Class<?> clss = myMethod("Example", String.class);
}
2)带有类型信息:
public static <T> Class<T> myMethod(String x, Class<T> clazz) {
// body
return clazz;
}
客户端代码:
public static void main(String[] args) {
Class<String> clsStr = myMethod("Example", String.class);
Class<?> clsAny = myMethod("Example", String.class);
}
3)原始类型(可以使用但不推荐):
public static Class myMethod(String x, Class clazz) {
// body
return clazz;
}
客户端代码:
public static void main(String[] args) {
Class<String> clsStr = myMethod("Example", String.class); // warning for Unchecked Assignment
Class<?> clsAny = myMethod("Example", String.class);
Class clsRaw = myMethod("Example", String.class);
}
4) 在类级别定义类型信息:
public class Main<T> {
// cannot be static
public Class<T> myMethod(String x, Class<T> clazz) {
// body
return clazz;
}
}
客户端代码:
public static void main(String[] args) {
Main<String> m = new Main<>();
Class<String> cls = m.myMethod("x", String.class);
}
TA贡献1802条经验 获得超5个赞
我假设您需要接受某种类型的类T作为参数并返回该类。在这种情况下,您的方法签名将是这样的:
public <T> Class<T> myMethod(String whatever, Class<T> clazz){
// put the rest of your code here
}
TA贡献1876条经验 获得超6个赞
在您的最新编辑中,您的使用示例如下:
ClassA test = doSomething("String One", ClassA.class);
该问题显示了类名、类对象和类实例之间的混淆。所以只是为了澄清,使用上面的例子:
一个类名————
ClassA
用来声明一个变量。一个 Class 实例 –
ClassA.class
– 是一个单例对象,它包含有关类的信息,并且可以作为参数传递给方法。一个类的实例
test
——是一个对象。它通常使用new
关键字创建。
您不能直接在声明中使用Class
对象,例如。ClassA.class
相反,您必须调用该类的newInstance()
方法Class
。仅当您的类具有无参数构造函数时才能使用该方法。要使用构造函数参数创建实例,请使用以下内容:
public <T> T doSomething(String jsonString, Class<T> clazz) throws ReflectiveOperationException {
Constructor<T> constructor = clazz.getConstructor(String.class);
return constructor.newInstance(jsonString);
}
上面的方法使用带有 String(传入的字符串)的构造函数创建所需类的实例。根据您的要求更改其主体以创建实例。
添加回答
举报