4

如果我将枚举作为 Java 中的方法的参数,是否可以自动推断返回类型?

我希望能够通过使 getValue 通用并使用枚举中的信息来支持这些调用

String myval = obj.getValue(MyEnum.Field1)
int myval2 = obj.getValue(MyEnum.Field2)

当前解决方案

我目前的解决方案是这样的:

String val = typeRow.getColumnValueGen(TYPEGODKENDCRM.COLUMN_TYPEGODKENDNR, String.class)

它用于访问表的 ORM 表示中的列。我知道这个字段是一个字符串,我想避免在每次调用时都告诉它。

4

3 回答 3

6

如果我将枚举作为 Java 中的方法的参数,是否可以自动推断返回类型?

不,你不能在 Java 中通过返回类型重载方法,如果你想要类似的东西:

public <T> T getValue(MyEnum enumValue)

编译器无法T根据参数进行推断。类型推断在某些情况下可以工作,但不是这样。编译器无法检查参数的某些方面并根据该值推断甚至验证类型。

除此之外,如果参数不是编译时常量,您希望它做什么?

MyEnum x = getEnumValue();
// Is this valid or not?
String myVal = obj.getValue(x);

基本上,您必须强制转换返回值......在 的情况下int,您需要强制转换为Integer而不是int,然后让自动拆箱完成剩下的工作。

就我个人而言,我只是创建多种方法:

String x = obj.getString(...);
int y = obj.getInt(...);

这没有歧义的余地,不需要任何聪明的泛型等。

于 2013-01-24T13:39:46.907 回答
2

一句话:不。您必须将 getValue 声明为返回 Object,然后将返回的对象转换为实际类型。不漂亮。

于 2013-01-24T13:39:37.090 回答
2

试试这个:

Object getValue(MyEnum returnType) {
    if (returnType == MyEnum.STRING) {
        String myString = ...
        return myString;
    }
    else if (returnType == MyEnum.INT) {
        int myInt = ...
        return Integer(myInt);
    }
}

然后:

String myval = (String) obj.getValue(MyEnum.Field1);
int myval2 = ( (Integer) obj.getValue(MyEnum.Field2) ).intValue();

请注意,您必须使用引用类型才能使其工作,因此您需要Integers 而不是int.

顺便说一句,我不会推荐这个。如果您想提供更多有关您正在尝试做的事情的信息,我们可能会建议一种更好的方法。

于 2013-01-24T13:41:01.837 回答