java 如何能在一个方法中返回多个值?

 我来答
匿名用户
2021-05-19
展开全部

     最开始说一下我使用的解决办法:Pair 和 Triple

     偶然看到这个问题,浏览量也很大,还是写一下我认为最好的办法吧,跟大家交流一下。

     说一下前面的人答的方案,都可以解决问题,但是觉得不太好。您要是说 可以解决问题就行,那我无话可说。写代码如果只是为了完成任务,不考虑实现是否优雅 和咸鱼有什么区别呢。

  • 数组明显不合适,数组适合放同一类型的数据,当然,你可以使用List<Object>,用Object 放结果,调用方需要知道Object的实际类型并做强制转换,不够优雅,差评

  • Map<String,Object> 是一种能解决问题的做法,使用Object 来放结果也存在调用方需要知道其实际类型并做强转的问题,用key 作区分,方法调用者需要知道方法内部的key ,即使使用全局变量做key 也不够优雅

  • 自定义对象,新建一个类,例如 public class DoubleResult<A, B>{getter; allArgsConstructor;}、public class TripleResult<A, B, C>{getter; allArgsConstructor;
    } ,效果棒棒的

     接下来要说的 Pair 和Triple 就是上面第三种方案的实现。org.apache.commons.lang3.tuple.Pair,org.apache.commons.lang3.tuple.Triple 是commons-lang包里的两种元组类型。Pair<L,R>可以存两个数据,Triple<L,M,R> 可以存三个,再多 那么考虑一下你的方法是否可以拆一下。

    简单说一下他们的用法吧。

    Pair 初始化:

Pair.of(L left, R right);

    例:Pair.of("a","b");

    或:

Pair<Object,Object> pair = new Pair<Object, Object>() {
 @Override
   public Object getLeft() {
      return null;
   }

   @Override
   public Object getRight() {
      return null;
   }

   @Override
   public Object setValue(Object value) {
      return null;
   }
};

    Triple 初始化:

Triple.of(L left, M middle, R right)

    或:

Triple<Object, Object, Object> triple = new Triple<Object, Object, Object>() {
      @Override
      public Object getLeft() {
         return null;
      }

      @Override
      public Object getMiddle() {
         return null;
      }

      @Override
      public Object getRight() {
         return null;
      }
   };

    Pair 获取内容:

pair.getKey();
pair.getValue();

    Triple 获取内容:

triple.getLeft();
triple.getMiddle();
triple.getRight();

    另外org.apache.commons.lang3.tuple 包下还有ImmutablePair、ImmutableTriple、MutablePair、MutableTriple 分别对应两种结构的不可变和可变类型,大家可以自行探索。

颜骏寒
推荐于2017-10-15 · TA获得超过4535个赞
知道大有可为答主
回答量:3630
采纳率:50%
帮助的人:1482万
展开全部
java中每个方法的返回值,有且仅有一个,因为方法中一旦使用return语句返回返回值,整个方法就会结束,下面的语句也将不会执行。
java中如果想返回多个值的话,可以采用数组和集合进行存储,然后返回集合或者数组即可。其中数组用来封装基本数据类型的数据,集合用来封装对象数据。可以根据返回值的实际类型来选择容器。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
奇骥看财经
推荐于2018-06-08
知道答主
回答量:13
采纳率:0%
帮助的人:15.8万
展开全部
比如方法是
public List Test()
{
.......
List list = new ArrayList();
list.add(你要的值1);
list.add(你要的值2);
下面依次类推
最后
return list;
}
当然,你也可以用数组等保存,最后返回就可以了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千屈采子
2018-09-12
知道答主
回答量:9
采纳率:100%
帮助的人:6719
展开全部
public class NewClass {
public static void main(String[] args){
int[] array = {0,1};
System.out.println(a(array)[0]);
System.out.println(a(array)[1]);
}
public static int[] a(int[] m){
int[] Black = new int[2];
Black[0] = 12;
Black[1] = 13;
return Black;
}
}
当然,要返回3个量时,可以把数组array的元素增加为3个,类似的,引用方法a(array[2]),即可返回第三个量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神皇期修士
2012-04-15 · TA获得超过192个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:159万
展开全部
定义一个存数据的类,里面的成员变量按需定义。然后让那方法返回类型为那个类,在方法里面给自定义类的对象成员变量赋值。返回该对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式