Java 将任何类作为方法的参数传递
以前可能有人问过这个问题,我也看到过一些类似的问题,但我不太明白 在Java中,如何使方法接受任何类作为参数 比如说,Java 将任何类作为方法的参数传递,java,generics,Java,Generics,以前可能有人问过这个问题,我也看到过一些类似的问题,但我不太明白 在Java中,如何使方法接受任何类作为参数 比如说, public (AnyClass) myMethod(String whatever, (AnyClass) thisClass){ } 要像这样使用: myMethod("Hello", ClassA); myMethod("Hello", ClassB); 谢谢你的帮助 编辑: 询问使用示例; 我所做的是将一个JSON字符串映射到POJO,但尝试将整个内容抽象出来以便
public (AnyClass) myMethod(String whatever, (AnyClass) thisClass){
}
要像这样使用:
myMethod("Hello", ClassA);
myMethod("Hello", ClassB);
谢谢你的帮助
编辑:
询问使用示例;
我所做的是将一个JSON字符串映射到POJO,但尝试将整个内容抽象出来以便可以重用。
所以-
我需要能够传递任何类和JSON字符串(或HttpConn),然后构建,然后使用Jackson构建该POJO并返回对象,不管是什么类型的对象
(我想做什么的想法):
希望这有助于理解这个问题。。。以及我对解决方案的理解 我假设您需要接受某种类型的类
T
作为参数,并返回该类。在这种情况下,您的方法签名如下:
public <T> Class<T> myMethod(String whatever, Class<T> clazz){
// put the rest of your code here
}
ClassA test = doSomething("String One", ClassA.class);
public <T> T doSomething(String jsonString, Class<T> clazz) throws ReflectiveOperationException {
Constructor<T> constructor = clazz.getConstructor(String.class);
return constructor.newInstance(jsonString);
}
公共类myMethod(字符串,类clazz){
//把剩下的代码放在这里
}
1)没有类型信息:
public static Class<?> myMethod(String text, Class<?> clazz) {
// body
return clazz;
}
客户端代码:
public static void main(String[] args) {
Class<?> clss = myMethod("Example", String.class);
}
public static void main(String[] args) {
Class<String> clsStr = myMethod("Example", String.class);
Class<?> clsAny = myMethod("Example", String.class);
}
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);
}
public static void main(String[] args) {
Main<String> m = new Main<>();
Class<String> cls = m.myMethod("x", String.class);
}
publicstaticvoidmain(字符串[]args){
类clsStr=myMethod(“Example”,String.Class);//未选中赋值的警告
类clsAny=myMethod(“示例”,String.Class);
类clsRaw=myMethod(“示例”,String.Class);
}
4) 在类级别定义类型信息时:
public class Main<T> {
// cannot be static
public Class<T> myMethod(String x, Class<T> clazz) {
// body
return clazz;
}
}
公共类主{
//不能是静态的
公共类myMethod(字符串x,类clazz){
//身体
回击声;
}
}
客户端代码:
public static void main(String[] args) {
Class<?> clss = myMethod("Example", String.class);
}
public static void main(String[] args) {
Class<String> clsStr = myMethod("Example", String.class);
Class<?> clsAny = myMethod("Example", String.class);
}
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);
}
public static void main(String[] args) {
Main<String> m = new Main<>();
Class<String> cls = m.myMethod("x", String.class);
}
publicstaticvoidmain(字符串[]args){
Main m=新的Main();
类cls=m.myMethod(“x”,String.Class);
}
在最新编辑中,您的使用示例如下:
public <T> Class<T> myMethod(String whatever, Class<T> clazz){
// put the rest of your code here
}
ClassA test = doSomething("String One", ClassA.class);
public <T> T doSomething(String jsonString, Class<T> clazz) throws ReflectiveOperationException {
Constructor<T> constructor = clazz.getConstructor(String.class);
return constructor.newInstance(jsonString);
}
这个问题显示了类名、类对象和类实例之间的混淆。因此,请使用上述示例进行澄清:
- 类名——
——用于声明变量ClassA
- 类实例–
–是一个单例对象,它保存有关类的信息,并可以作为参数传递给方法ClassA.Class
- 类的实例—
——是一个对象。它通常使用test
关键字创建new
类
对象,例如ClassA.Class
。相反,您必须调用类的newInstance()
方法。只有当类具有无参数构造函数时,才能使用该方法。要创建具有构造函数参数的实例,请使用以下命令:
public <T> Class<T> myMethod(String whatever, Class<T> clazz){
// put the rest of your code here
}
ClassA test = doSomething("String One", ClassA.class);
public <T> T doSomething(String jsonString, Class<T> clazz) throws ReflectiveOperationException {
Constructor<T> constructor = clazz.getConstructor(String.class);
return constructor.newInstance(jsonString);
}
public T doSomething(字符串jsonString,类clazz)抛出ReflectiveOperationException{
Constructor=clazz.getConstructor(String.class);
返回constructor.newInstance(jsonString);
}
上述方法使用接受字符串(传入的字符串)的构造函数创建所需类的实例。根据您的要求更改其主体以创建实例。任何类对象或任何实例?对于前者使用类
对于后者使用对象
否,它必须是类本身-或稍后使用的类引用(用于映射)。这可能吗?这可能会对您有所帮助。在这种情况下,您可以使用Class
作为参数类型,然后像这样调用它:myMethod(“Hello”,ClassA.Class)
是的,这是一个问题吗?非常感谢您的解释和帮助!这是我找到的最连贯的答案:)