根据调用方法更改返回类型

The*_*ant 4 java generics reflection typing return-value

基本上我想要的是,两个公共方法具有稍微不同的返回值,可以调用相同的方法来完成所需的任何工作.它们都返回私有方法的返回值,但私有方法将知道如何根据调用它的公共方法返回正确的值.

示例方法:

public Map<Type1, Type3> doSomething1();
public Map<Type2, Type3> doSomething2();

private Map<Type1/Type2, Type3> doSomething(); 
Run Code Online (Sandbox Code Playgroud)

因此,在上面的示例中,doSomething()返回Type1或Type2作为Map的键类型,具体取决于调用它的公共方法.它将能够执行简单的检查,并使用正确类型的对象填充地图.

也许这可以通过一些聪明的Java反射来完成?我不确定.这一切看起来都很狡猾,所以如果有更好的方法可以解决这个问题,我会全神贯注.

jrh*_*ath 8

我强烈建议在这里避免使用反射魔法.一个函数必须在属性上做一件事,而不是取决于谁调用它.

更好的方法是将doSomething()重构为更小的函数,创建两个名为doS​​omethingFor1()和doSomethingFor2()的新函数.这两个函数都可以重用旧的doSomething()的重构部分.

现在有doSomething1()调用并使用doSomethingFor1().

同样,doSomething2()应该使用doSomethingFor2().

干杯,

JRH.

  • 必须通过适当地重构函数并将重复代码放在常用函数/方法中来抵消重复. (2认同)