您当前的位置:首页 > 互联网教程

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

发布时间:2025-05-23 12:28:27    发布人:远客网络

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

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

最开始说一下我使用的解决办法: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.of(Lleft,Rright);

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

Pair<Object,Object>pair=newPair<Object,Object>(){

publicObjectsetValue(Objectvalue){

Triple.of(Lleft,Mmiddle,Rright)

或:

Triple<Object,Object,Object>triple=newTriple<Object,Object,Object>(){

pair.getValue();

Triple获取内容:

triple.getRight();

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

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

二、在一个java方法中如何返回两个参数的值

1.return数组或集合。如果只返回2个参数或已确定个数,则返回数组(同一类型使用类型数组,不同类型使用Object[])。参数个数未知时,使用集合。 2.组成一个字符串,使用分隔符分隔。接受后截取或分割。注:分隔符的话,建议使用诸如逗号(,)之类不常使用的符号,&在java里是运算符。有时会产生不必要的麻烦。看个人喜好。 3.可以传进去一个对象,然后更改其属性值。执行方法后直接访问对象属性就好了。(个人认为:有时会有用,这样其实可以接收出来多个值,而且,可以共享对象,避免过多new对象。)

三、java输出时不能输出多个值吗

1、或者System.out.println(“a=”+a+";"+"b="+b+";"+"c="c+";");

2、System.out.println在输出前,会把传入的参数进行运算之后,再调用运算结果对象的toString()方法,也就是把运算结果转换为字符串再输出。比如说你如果写成System.out.println(a+b+c),其实程序是先把abc做了“相加”的操作,如果abc都是int,那么“相加”就是求和,所以System.out.println(a+b+c)输出的就是abc之和的字符串,如果a=1,b=2,c=3那么输出的就是6,但是如果abc不是int,而是其他类型的数据,那么“相加”的意义就要看这种类型的对象是如何定义的了,如果是字符串类型String的话,那么“相加”的意义就是“拼接”。