Java 将任何类作为方法的参数传递

Java 将任何类作为方法的参数传递,java,generics,Java,Generics,以前可能有人问过这个问题,我也看到过一些类似的问题,但我不太明白 在Java中,如何使方法接受任何类作为参数 比如说, public (AnyClass) myMethod(String whatever, (AnyClass) thisClass){ } 要像这样使用: myMethod("Hello", ClassA); myMethod("Hello", ClassB); 谢谢你的帮助 编辑: 询问使用示例; 我所做的是将一个JSON字符串映射到POJO,但尝试将整个内容抽象出来以便

以前可能有人问过这个问题,我也看到过一些类似的问题,但我不太明白

在Java中,如何使方法接受任何类作为参数

比如说,

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)
是的,这是一个问题吗?非常感谢您的解释和帮助!这是我找到的最连贯的答案:)