我试图从一个Java方法返回2个值,但我得到这些错误。这是我的代码:

// Method code
public static int something(){
    int number1 = 1;
    int number2 = 2;

    return number1, number2;
}

// Main method code
public static void main(String[] args) {
    something();
    System.out.println(number1 + number2);
}

错误:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
    at assignment.Main.something(Main.java:86)
    at assignment.Main.main(Main.java:53)

Java结果:1


当前回答

首先,如果Java有元组来返回多个值会更好。

其次,编写尽可能简单的Pair类,或者使用数组。

但是,如果您确实需要返回一个pair,请考虑它所代表的概念(从字段名开始,然后是类名)—以及它所扮演的角色是否比您想象的更大,以及对它进行显式抽象是否有助于您的整体设计。也许这是一个代码提示…… 请注意:我并不是武断地说它会有帮助,但只是看看,看看它是否有用……或者如果没有。

其他回答

您可以创建一个记录(Java 14起可用),以返回具有类型安全、命名和简洁的值。

public record MyResult(int number1, int number2) {
}

public static MyResult something() {
    int number1 = 1;
    int number2 = 2;

    return new MyResult(number1, number2);
}

public static void main(String[] args) {
    MyResult result = something();
    System.out.println(result.number1() + result.number2());
}

你也可以将可变对象作为参数发送,如果你使用方法来修改它们,那么当你从函数返回时,它们将被修改。它不能用于Float之类的东西,因为它是不可变的。

public class HelloWorld{

     public static void main(String []args){
        HelloWorld world = new HelloWorld();

        world.run();
     }



    private class Dog
    {
       private String name;
       public void setName(String s)
       {
           name = s;
       }
       public String getName() { return name;}
       public Dog(String name)
       {
           setName(name);
       }
    }

    public void run()
    {
       Dog newDog = new Dog("John");
       nameThatDog(newDog);
       System.out.println(newDog.getName());
     }


     public void nameThatDog(Dog dog)
     {
         dog.setName("Rutger");
     }
}

结果是: 念完

如果你确定你只需要返回两个值,你可以实现一个泛型Pair:

public class Pair<U, V> {

 /**
     * The first element of this <code>Pair</code>
     */
    private U first;

    /**
     * The second element of this <code>Pair</code>
     */
    private V second;

    /**
     * Constructs a new <code>Pair</code> with the given values.
     * 
     * @param first  the first element
     * @param second the second element
     */
    public Pair(U first, V second) {

        this.first = first;
        this.second = second;
    }

//getter for first and second

然后让方法返回Pair:

public Pair<Object, Object> getSomePair();

在我看来,最好是创建一个新类,其中构造函数是你需要的函数,例如:

public class pairReturn{
        //name your parameters:
        public int sth1;
        public double sth2;
        public pairReturn(int param){
            //place the code of your function, e.g.:
            sth1=param*5;
            sth2=param*10;
        }
    }

然后像使用函数一样使用构造函数:

pairReturn pR = new pairReturn(15);

你可以使用pR.sth1 pR.sth2作为函数的2个结果

您不需要创建自己的类来返回两个不同的值。就像这样使用HashMap:

private HashMap<Toy, GameLevel> getToyAndLevelOfSpatial(Spatial spatial)
{
    Toy toyWithSpatial = firstValue;
    GameLevel levelToyFound = secondValue;

    HashMap<Toy,GameLevel> hm=new HashMap<>();
    hm.put(toyWithSpatial, levelToyFound);
    return hm;
}

private void findStuff()
{
    HashMap<Toy, GameLevel> hm = getToyAndLevelOfSpatial(spatial);
    Toy firstValue = hm.keySet().iterator().next();
    GameLevel secondValue = hm.get(firstValue);
}

甚至还有类型安全的好处。