这可能是以前问过的,我已经看过一些类似/沿线的内容,但不太了解。
在Java中,如何使方法接受任何类作为参数?
例如,
public (AnyClass) myMethod(String whatever, (AnyClass) thisClass){
}
用法如下:
myMethod("Hello", ClassA);
myMethod("Hello", ClassB);
感谢您的帮助!
编辑:
要求使用示例; 我正在做的是将JSON字符串映射到POJO,但是尝试将整个内容抽象出来,以便可以重用。 所以- 我需要能够传递任何类和JSON字符串(或HttpConn),然后进行构建,然后使用Jackson来构建该POJO并返回对象,无论其类型是什么。
(我要做什么的想法):
public Class<?> doSomething(String jsonString, Class<?> clazz){
clazz newInstance = mapper.readValue(jsonString, clazz);
return clazz;
}
就像这样:
ClassA test = doSomething("String One", ClassA.class);
ClassB testTwo = doSomething("Different format string", ClassB.class);
希望能帮助您理解问题...以及我对解决方案的理解!
答案 0 :(得分:3)
我假设您需要接受某种类型T
的类作为参数并返回该类。在这种情况下,您的方法签名将如下所示:
public <T> Class<T> myMethod(String whatever, Class<T> clazz){
// put the rest of your code here
}
答案 1 :(得分:3)
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);
}
答案 2 :(得分:1)
在您的最新编辑中,您的用法示例如下:
ClassA test = doSomething("String One", ClassA.class);
问题显示了类名,Class对象和类实例之间的混淆。因此,使用上面的示例进行澄清:
类名– ClassA
–用于声明变量。
类实例– 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(传入的字符串)的构造函数创建所需类的实例。更改其主体以根据您的要求创建实例。