如果我将Enum作为参数提供给Java中的方法,是否可以自动推断返回类型?
我希望能够通过使getValue通用并使用Enum中的信息来支持这些调用
String myval = obj.getValue(MyEnum.Field1)
int myval2 = obj.getValue(MyEnum.Field2)
当前解决方案
我目前的解决方案是这样的:
String val = typeRow.getColumnValueGen(TYPEGODKENDCRM.COLUMN_TYPEGODKENDNR, String.class)
用于访问表的ORM表示中的列。我知道这个字段是一个字符串,我想避免在每次调用时告诉它。
答案 0 :(得分:5)
如果我将Enum作为参数提供给Java中的方法,是否可以自动推断返回类型?
没有。你不能通过Java中的返回类型重载方法,如果你想要类似的东西:
public <T> T getValue(MyEnum enumValue)
编译器无法根据参数推断T
。类型推断可以在某些情况下工作,但不是这样的。编译器无法检查参数的某些方面,并根据该值推断或甚至验证类型。
除了其他任何内容之外,如果参数不是编译时常量,你会期望它做什么?
MyEnum x = getEnumValue();
// Is this valid or not?
String myVal = obj.getValue(x);
基本上你会拥有来投射返回值...而在int
的情况下,你需要转换为Integer
而不是{{1然后让自动取消装箱完成剩下的工作。
就个人而言,我只是创建了多种方法:
int
没有任何歧义的余地,不需要任何巧妙的泛型等。
答案 1 :(得分:2)
总之:No。您必须将getValue声明为返回Object,然后将返回的对象强制转换为实际类型。不漂亮。
答案 2 :(得分: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();
请注意,您必须使用引用类型才能生效,因此您需要Integer
而不是int
。
顺便说一下,我不推荐这个。如果您想提供有关您尝试做什么的更多信息,我们可能会建议更好的方法来实现它。