使自定义对话框类型安全 - 如何对不是类的实例的类型使用类型参数

时间:2018-02-08 09:59:04

标签: java generics type-safety

我想让以下代码更安全,但不要将类型参数放在正确的位置。

我有一个abstract class Function implements FunctionInterface具有一些功能并显示通过FunctionInterface实现的内容。还有另一个通用ReturnSomethingInterface<T>。现在有许多函数extends Function和方法

public Object openDialog(FunctionInterface myFunction)
{
  "display and do something with myFunction"
  Object returnValue = null;
  if (myFunction instanceof ReturnSomethingInterface<?>)
  {
    returnValue = myFunction.returnSomething();
  }
  return returnValue;
}

所以显然有些函数会返回一些东西而其他函数会赢得(return null)并且返回类型会有所不同。

到目前为止的解决方案: - 只需致电openDialog(myFunctionWithoutReturnValue)并忽略返回的null值,或者我有类似MyReturnType result = (MyReturnType) openDialog(myFunctionWithReturnValueOfMyReturnType)的内容。

此处我会收到警告,因为未经检查的转化为ObjectMyReturnType

我的解决方案:使用类型参数将返回的类型绑定到ReturnSomethingInterface<T>中的泛型类型。

当我执行public <T, S extends FunctionInterface & ReturnSomethingInterface<T>> T openDialog(S myFunction)之类的操作时,我现在可以编写MyReturnType result = openDialog(myFunctionWithReturnValueOfMyReturnType)而无需转换返回的值,也不会发出有关未经检查的转换的警告。

我的问题:不执行ReturnSomethingInterface的功能不再是openDialog()的有效参数。

我需要或希望拥有的另一种方法openDialog(.. myFunction)接受实施FunctionInterface的参数,但不实施ReturnSomethingInterface

我的问题:有类似的东西吗?或者有没有这样的原因?

解决方法是将openDialog()重命名为openDialogWithoutReturn(),以查看包含不会返回任何内容的参数的调用,但我更喜欢带有类型参数的解决方案。有什么想法吗?

0 个答案:

没有答案