问题描述
我想创建一个可以根据操作返回不同数据类型的方法。不幸的是,我无法包含真正的代码片段,但希望通过以下代码片段,您可以有所了解。基本上,我将这个方法称为具有不同参数的多种类型,并且根据情况它应该返回不同的类。在实际代码中,所有情况都有许多共同部分,只有细微的差别。我不想为每种情况创建不同的方法,而是想将它们全部收集在一起。
解决方法
作为 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 ) ) ;
然后调用方法检查每个字段以找到单独的非空值。
不推荐使用这些方法。您的情况通常是应用程序设计错误的标志,即“代码异味”。我建议您就您的实际问题领域咨询在面向对象设计方面有经验的人。