从一个方法返回两个变量
Posted
技术标签:
【中文标题】从一个方法返回两个变量【英文标题】:return two variables from one method 【发布时间】:2014-12-22 12:32:04 【问题描述】:如何正确编写以下代码?
public String toString(int[] position, int xOffset, int yOffset)
String postn = String.format("[%d,%d]", position[0], position[1]);
String movm = String.format("[%d,%d]", xOffset, yOffset);
return (postn, movm);
出现以下错误
movm cannot be returned.
【问题讨论】:
嗨。可以返回 Map.Entrypublic String[].....
。另外,@Reimeus 回答了它.....
看这个:***.com/questions/2832472/…
在 Java 中,您只能返回一个变量/对象。如果你想返回两个字符串对象。我建议你把它们放在一个数组、列表或集合中,然后通过返回那个对象。
【参考方案1】:
使用 Java 8 时,您可以使用 Pair 类。
private static Pair<String, String> foo (/* some params */)
final String val1 = ""; // some calculation
final String val2 = ""; // some other calculation
return new Pair<>(val1, val2);
否则只返回一个数组。
【讨论】:
pair 类是一部分或javafx
。我们可以在 SE 中使用吗?
@SubhrajyotiMajumder As of JDK 7u6 JavaFX is included with the standard JDK and JRE bundles.
@DavidM。我同意你的看法。尤其是在期待 Java9 模块化时,可能会遇到没有安装 UI 模块的运行时。数组或简单的 pojo 类可能更优雅。【参考方案2】:
Java 中的方法不能返回两个不同的值。
当这种需要发生时,您通常有两种选择:
-
创建一个具有您想要返回的类型的类,然后返回该类的一个实例。通常这些类是非常基本的,包含公共成员和可选的构造函数来启动具有所有必需值的实例。
将引用类型对象作为参数添加到方法中,该方法将使用您想要返回的值进行变异。在您的示例中,您使用字符串,因此这将不起作用,因为在 Java 中字符串是不可变的。
另一种选择是使用字符串数组,因为您的两种返回类型都是字符串。您可以将此选项用作返回值,或由方法更改的参数。
编辑: 通常“toString”方法只返回一个字符串。也许您应该考虑使用一些分隔符将两个字符串连接成一个字符串。示例:
return postn + "_" + movm;
【讨论】:
【参考方案3】:我可以想到四种方法来实现这个场景:
1。使用类
创建一个具有您想要返回的所有属性的类,在您的情况下它可以是
public class Sample
private String postn;
private String movm;
public String getPostn()
return postn;
public void setPostn(String postn)
this.postn = postn;
public String getMovm()
return movm;
public void setMovm(String movm)
this.movm = movm;
并更改您的方法以包含此类的对象并在这些属性中设置值。将方法的返回类型更改为类名,例如样本
public Sample toString(int[] position, int xOffset, int yOffset)
String postn = String.format("[%d,%d]", position[0], position[1]);
String movm = String.format("[%d,%d]", xOffset, yOffset);
Sample obj = new Sample();
obj.setPostn(postn);
obj.setMovm(movm);
return obj;
2。使用数组
更改方法以返回字符串数组并将值存储在该数组中:
public String[] toString(int[] position, int xOffset, int yOffset)
String postn = String.format("[%d,%d]", position[0], position[1]);
String movm = String.format("[%d,%d]", xOffset, yOffset);
String arr[] = new String[2];
arr[0] = postn;
arr[1] = movm;
return arr;
3。使用 javatuple
您可以在链接http://www.javatuples.org/阅读详细信息
4。通过分隔数据
如果您确定变量中的数据,您可以使用一些分隔符。但是,当您想使用这些值时,这将需要使用分隔符进行吐痰。
public String toString(int[] position, int xOffset, int yOffset)
String postn = String.format("[%d,%d]", position[0], position[1]);
String movm = String.format("[%d,%d]", xOffset, yOffset);
return postn+"~"+movm;
【讨论】:
【参考方案4】:在Java中,当你想要一个函数返回多个值时,你必须
将这些值嵌入到您返回的对象中 或更改传递给您的函数的对象 ~dystroy
你有两个选择(据我所知):
选项1:作为新数组返回:
public String[] toString(int[] position,int xOffset,int yOffset)
String postn=String.format("[%d,%d]",position[0],position[1]);
String movm=String.format("[%d,%d]",xOffset,yOffset);
string [] myArray = new string[2];
myArray[0] = postn;
myArray[1] = movm;
return myarray; //returns as array
选项 2:原样返回
已编辑以显示设置
private String a;
private String b;
public void setPostN(String s)
a= s;
public String getPostN()
return a;
public void setMovm(String s)
a= s;
public String getMovm()
return a;
用你的方法:
public void toString(int[] position,int xOffset,int yOffset)
String postn=String.format("[%d,%d]",position[0],position[1]);
String movm=String.format("[%d,%d]",xOffset,yOffset);
setPostN(postn);
setMovm(movm);
//no return, but available via calling getMovm() or getPostN()
【讨论】:
obj 似乎主要是 C#。 很好的插图,但也许你想调用你的类Obj
而不是 obj
并写出 getter 和 setter 方法来获得一个可编译的例子:)
感谢您的 cmets,@Henrik 这可能是因为 java/c# 非常相似(而且我使用 99% c# :P)
ObjClass 看起来很 CShapry。这个问题是关于 Java 的,因为它是一个非常基本的问题,所以这个答案可能会非常令人困惑。
只公开它们可能就足够了 :)【参考方案5】:
您可以创建一个包装器类型,实例化并返回它,或者返回一个 Map 或 List/Array。
【讨论】:
以上是关于从一个方法返回两个变量的主要内容,如果未能解决你的问题,请参考以下文章