首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Java方法返回多个对象?

如何从Java方法返回多个对象?
EN

Stack Overflow用户
提问于 2009-01-19 13:51:44
回答 18查看 263.5K关注 0票数 188

我想从一个Java方法返回两个对象,我想知道有什么好方法可以做到这一点?

我能想到的可能方法是:返回一个HashMap (因为这两个对象是相关的)或返回一个Object对象的ArrayList

更准确地说,我想返回的两个对象是(a)对象的List和(b)相同对象的逗号分隔名称。

我想从一个方法返回这两个对象,因为我不想通过遍历对象列表来获得逗号分隔的名称(在这个方法中,我可以在相同的循环中做到这一点)。

不知何故,返回HashMap看起来并不是一种非常优雅的方式。

EN

回答 18

Stack Overflow用户

发布于 2009-01-19 13:58:02

如果要返回两个对象,通常需要返回封装这两个对象的单个对象。

您可以返回NamedObject对象列表,如下所示:

public class NamedObject<T> {
  public final String name;
  public final T object;

  public NamedObject(String name, T object) {
    this.name = name;
    this.object = object;
  }
}

然后,您可以很容易地返回一个List<NamedObject<WhateverTypeYouWant>>

还有:为什么要返回逗号分隔的名称列表,而不是List<String>?或者更好的方法是返回一个Map<String,TheObjectType>,其中的键是对象的名称和值(除非您的对象有指定的顺序,在这种情况下,NavigableMap可能就是您想要的。

票数 137
EN

Stack Overflow用户

发布于 2013-04-04 04:42:30

如果您调用的方法是私有的,或者是从一个位置调用的,请尝试

return new Object[]{value1, value2};

调用者如下所示:

Object[] temp=myMethod(parameters);
Type1 value1=(Type1)temp[0];  //For code clarity: temp[0] is not descriptive
Type2 value2=(Type2)temp[1];

David Hanak的配对示例没有语法上的好处,并且被限制为两个值。

return new Pair<Type1,Type2>(value1, value2);

调用者看起来像这样:

Pair<Type1, Type2> temp=myMethod(parameters);
Type1 value1=temp.a;  //For code clarity: temp.a is not descriptive
Type2 value2=temp.b;
票数 29
EN

Stack Overflow用户

发布于 2009-01-19 14:09:42

当我用Java编写代码时,我几乎总是最终定义n-Tuple类。例如:

public class Tuple2<T1,T2> {
  private T1 f1;
  private T2 f2;
  public Tuple2(T1 f1, T2 f2) {
    this.f1 = f1; this.f2 = f2;
  }
  public T1 getF1() {return f1;}
  public T2 getF2() {return f2;}
}

我知道这有点难看,但它是有效的,而且你只需要定义一次你的元组类型。元组是Java真正缺乏的东西。

编辑: David Hanak的示例更加优雅,因为它避免了定义getter,并且仍然保持对象的不可变性。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/457629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档