使用enum参数自动推断返回类型
如果我将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表示中的列。 我知道这个字段是一个字符串,我想避免在每次调用时告诉它。
如果我将Enum作为参数提供给Java中的方法,是否可以自动推断返回类型?
不能。您不能通过Java中的返回类型重载方法,如果您想要类似的东西:
public T getValue(MyEnum enumValue)
编译器无法根据参数推断出T
。 类型推断在某些情况下可以起作用,但不是这样的。 编译器无法检查参数的某些方面,并根据该值推断甚至validation类型。
除了其他任何东西,如果参数不是编译时常量,你会期望它做什么?
MyEnum x = getEnumValue(); // Is this valid or not? String myVal = obj.getValue(x);
基本上你必须转换返回值…而在int
的情况下,你需要转换为Integer
而不是int
,然后让自动取消装箱完成剩下的工作。
就个人而言,我只是创建了多种方法:
String x = obj.getString(...); int y = obj.getInt(...);
这没有留下任何歧义的空间,不需要任何巧妙的generics等。
总而言之:不。您必须将getValue声明为返回Object,然后将返回的对象强制转换为实际类型。 不漂亮。
尝试这个:
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
。
顺便说一句,我不推荐这个。 如果您想提供有关您尝试做什么的更多信息,我们可能会建议更好的方法来实现它。