从java中的方法返回不同类型的数据?

2022-09-01 03:49:20
public static void main(String args[]) {
    myMethod(); // i am calling static method from main()
 }

.

public static ? myMethod(){ // ? = what should be the return type
    return value;// is String
    return index;// is int
}

myMethod()将返回字符串和整型值。因此,从我想出以下解决方案中获取这些返回值。main()

创建类调用ReturningValues

public class ReturningValues {
private String value;
private int index;

// getters and setters here
}

并按如下方式进行更改。myMethod()

 public static ReturningValues myMethod() {
    ReturningValues rv = new ReturningValues();
    rv.setValue("value");
    rv.setIndex(12);
    return rv;
}

现在我的问题是,有没有更简单的方法来实现这一目标??


答案 1

我使用枚举创建各种返回类型。它不会自动定义。该实现看起来像工厂模式。

public  enum  SmartReturn {

    IntegerType, DoubleType;

    @SuppressWarnings("unchecked")
    public <T> T comeback(String value) {
        switch (this) {
            case IntegerType:
                return (T) Integer.valueOf(value);
            case DoubleType:
                return (T) Double.valueOf(value);
            default:
                return null;
        }
    }
}

单元测试:

public class MultipleReturnTypeTest {

  @Test
  public void returnIntegerOrString() {
     Assert.assertTrue(SmartReturn.IntegerType.comeback("1") instanceof Integer);
     Assert.assertTrue(SmartReturn.DoubleType.comeback("1") instanceof Double);
  }

}

答案 2

不。Java方法只能返回一个结果(原语或对象),创建这样的-type类正是你这样做的方式。voidstruct

请注意,通常可以使像您这样的类不可变:ReturningValues

public class ReturningValues {
    public final String value;
    public final int index;

    public ReturningValues(String value, int index) {
        this.value = value;
        this.index = index;
    }
}

这样做的好处是,可以在线程之间传递 a,而不必担心意外地使事情不同步。ReturningValues