java - 将可能是多种类型的参数传递给 Java 中的方法?

标签 java methods types

我正在使用一个带有方法 foo 的库,签名如下:

TypeR foo(TypeA first, int second)
TypeR foo(TypeB first, int second)
TypeR foo(TypeC first, int second)

我正在编写自己的方法 bar 调用 foo,我想直接将第一个参数传递给 foo:

bar(??? first, int baz) {
    int second = someCalculation(baz);
    return foo(first, second);
}

我的问题是我不知道应该给 bar 中的参数 first 什么类型。 Java 中似乎没有联合类型。我怎样才能解决这个问题而不必编写三个几乎相同的 bar 版本?

TypeATypeC 类型不共享公共(public)接口(interface),我无法控制它们或 foo,因为它们在一个外部图书馆。我所能控制的就是如何实现 bar

最佳答案

我能想到的最接近的是这样的(删除与 second 相关的内容,因为它与重点无关)。

TypeR bar(Object first) {
  TypeR retvalue;
  if (first instanceof TypeA)
    retvalue = foo( (TypeA)first );
  else if (first instanceof TypeB)
    retvalue = foo( (TypeB)first );
  else if (first instanceof TypeC)
    retvalue = foo( (TypeC)first );
  return retvalue;
}

如果有更具体的已知父类(super class)型 TypeA 等,您显然可以使用它而不是 Object 作为参数。

这只有在 foo 的所有三个版本都具有相同的返回类型时才有可能。

遗憾的是,这个“解决方案”并没有比编写三个重载版本的 bar 更好,甚至可能更糟。

关于java - 将可能是多种类型的参数传递给 Java 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400523/

相关文章:

javascript - 将字符串参数传递给构造函数以调用函数

python - 关于 Python 'yield' 关键字的问题,我在其他地方没有找到答案,以及它在我正在处理的代码中的具体用途

haskell - 为什么我不能声明推断类型?

java - Spring Data JPA - 带模式匹配的不区分大小写的查询

Java - 通过哈希比较两个集合的最佳方法(通过==)

javascript - 如何向函数添加方法?

types - 使用显式类型将对象中的方法的可见性限制为定义它的模块

types - 在另一个装饰函数 @spec 中指定对 Elixir 函数 @spec 的引用

java - 打包 Java 应用程序。 with/DB 在客户端机器上运行

java - ANTLR 命题逻辑评估器