当前位置: 首页 > 知识库问答 >
问题:

Java中的泛型参数类型和返回类型

袁华清
2023-03-14

我试图创建一个Java方法,它接受一个对象类型和它应该转换成的数据类型。

例如,如果我应该能够返回一个值1作为Int或双根据需要。我使用类传递数据类型作为参数。

问题:如何使方法泛型以接受基于输入参数的返回类型?

下面的代码只是一个示例,它可能在语法上不正确,用于解释我的问题。

public class JavaTest {

    public static void main(String[] args) {
        getValue(1,int.class);
        getValue(1,double.class);
        getValue("adf",String.class);
    }

    public static <E> void getValue(Object obj,Class<?> type) {
        if (type == String.class) { 
            // return string value
        }else if (type == int.class) { 
            //return Integer.parseInt(obj);
        }else if (type == double.class) { 
            //return Double.parseDouble(obj);
        }
    }
}

共有3个答案

曹新觉
2023-03-14

由于java方法只能返回一个结果,因此必须进行一些变通。如您所知,您可以返回一个对象

正如这里提到的:从java中的方法返回不同类型的数据?你可以用两个不同类型的私有值来编写你的一个类,以便稍后询问设置了哪一个!

把这个应用到你的问题上,你可以这样写:

public class ReturningValues {
public final double y;
public final int x;

public ReturningValues(double y, int x) {
    this.y = y;
    this.x = x;
}
}

然后使用该类作为方法的返回值:

public static ReturnValues myMethod(){
    ReturningValues rv = new ReturningValues(null,1);
    return rv;
}
谢华彩
2023-03-14
 public static void main(String[] args) {
       int i=  (int) getValue(10,int.class);
       System.out.println("int value -->"+i);
      Double d = (Double) getValue(25.023,double.class);
      System.out.println("double d-->"+d);

        String s=(String) getValue("adf",String.class);
        System.out.println("String s-->"+s);
    }

    public static   <T> Object getValue(Object obj,Class<?> type) {
       return obj;

    }
解阳泽
2023-03-14

如何使该方法成为基于输入参数接受返回类型的通用方法?

type参数可用于指定方法的返回类型,您可以通过该参数的type参数将其与参数相关联:

public static <E> E getValue(Object obj, Class<E> type) {

您还需要使用Class.cast()使编译器确信该方法返回正确的类型。(您也可以使用普通的强制转换,但这将受到类型安全警告的影响。)例如:

    // ...
    } else if (type == Integer.class) { 
        return type.cast(Integer.valueOf(obj.toString()));
    }

还要注意的是,这种方法不能像代码所示,直接影响到基元类型的转换。您必须转换为它们的包装器类。换句话说,不能使用int.classdouble。类等。;您必须改为使用Integer。类双精度。类,等等。

 类似资料:
  • 我试图创建一个返回泛型类型参数的方法。 我有一个类车辆订单扩展抽象类订单。在类订单中,我创建了一个抽象方法接收HiredObject。这个方法不会接收任何参数,并将返回一个泛型。 我在VehicleOrder类中实现了这个方法,并将其设置为返回类参数vehicle。 问题是,当我实例化一个新的VeilceOrderorororororororororororororderororororororo

  • 可以使用泛型将返回类型与参数类型匹配吗? 实例案例: 我有一个抽象类,可以从不同的POJO导入数据,这个类包含一个abstract方法importData。 importData返回的对象必须与传递给该方法的对象类型相同。 由于抽象方法的每个实现的对象类型不同,并且类型不扩展另一个,如何定义抽象方法,以便实现返回类型和传递类型必须匹配? 经过考验: 结果: 方法的返回类型不必与传递的对象类型匹配。

  • 问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问

  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • 我在我的Java程序中写了这个函数: 这就是我所说的: 它是有效的,但我觉得我应该能够省略第一个参数,并从返回类型(结果被分配到的类型)推断出它。这可能吗?如果是,语法是什么?