【问题标题】:Can a method return different data types depending on the action?方法能否根据操作返回不同的数据类型?
【发布时间】:2021-06-19 19:54:04
【问题描述】:

我想创建一个可以根据操作返回不同数据类型的方法。不幸的是,我不能包含真正的代码 sn-p 但希望通过下面的代码,您可以有所了解。基本上,我将此方法称为具有不同参数的许多类型,并且根据情况它应该返回不同的类。在真实的代码中,所有的情况都有很多共同的部分,只有很小的不同。我不想为每种情况创建不同的方法,而是想将它们全部收集在一起。

【问题讨论】:

  • 除非所有这些返回值都继承自一个公共基类,否则您唯一的选择是将返回类型更改为Object

标签: java generics methods computer-science


【解决方案1】:

作为commented,方法只能返回单一类型的单一值。

您至少有三个三种解决方法:

  • 返回Object 类型的对象。调用方法多次尝试instanceOf以发现具体类型。
  • 返回更通用类型的对象,其实际具体类型是子类。这可能适用于Animal 抽象类或与Dog 和Cat 具体类的接口。但对于您的 int 与 String 方案而言,这并没有真正意义。
  • 返回一个自定义类的对象,该对象定义有多个成员字段,其中一个字段除外。

使用新的records 功能,Java 16 中的最后一个现在变得更容易了。记录是声明类的一种更简洁的方式,其主要目的是透明和不可变地传递数据。编译器隐式创建构造函数、getter、equals & hashCode 和 toString。

public record FunkyMathResult( int number , String text ) {}

实例化除一个字段之外的所有字段为空。

return new FunkyMathResult( null , String.valueOf( a*b ) ) ;

然后调用方法检查每个字段以找到唯一的非空值。

不推荐使用这些方法。您的情况通常表明您的应用程序设计错误,即“代码异味”。我建议您就您的实际问题领域咨询面向对象设计方面经验丰富的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2013-08-11
    • 2017-06-10
    • 2022-11-27
    相关资源
    最近更新 更多