Java中的元组分配

时间:2018-12-14 19:07:37

标签: java tuples variable-assignment multiple-assignment

与Python不同,Java本身不支持元组。因此,不会提供tuple assignment这样有用的可能性。

您将如何实施?您的解决方案应该:

  1. 尽可能通用。
  2. 尽可能可读。
  3. 分配位置不包含任何临时变量。
  4. 允许使用实用程序方法,但只能使用静态方法。不应创建或导入Tuple类。不应使用数组或集合。

我将举一个简单的例子。不要太在意*Func()方法的内容。它们可以内联,也可以依赖较少的变量或其他变量。

public class TupleAssignment {
    static String sFunc(String s, int i, double d) {
        return i + s + d;
    }

    static int iFunc(String s, int i, double d) {
        return i + s.length() - (int) d;
    }

    static double dFunc(String s, int i, double d) {
        return (double) i / s.length() + d;
    }

    public static void main(String[] args) {
        String s = "ABCDE";
        int i = 2;
        double d = 0.6;

        String s1 = sFunc(s, i, d);
        int i1 = iFunc(s, i, d);
        double d1 = dFunc(s, i, d);
        s = s1;
        i = i1;
        d = d1;

        System.out.println(s + ", " + i + ", " + d);
    }
}

这将产生正确的结果:

2ABCDE0.6, 7, 1.0

,但需要其他变量s1i1d1。如果您尝试通过这种方式摆脱它们:

s = sFunc(s, i, d);
i = iFunc(s, i, d);
d = dFunc(s, i, d);

您会得到错误的结果:

2ABCDE0.6, 11, 1.8222222222222224

如何获得符合以上四个要求的先前结果?如果您看到不错的局部解决方案,也可以将其添加为答案。

请注意,这个问题不是关于创建元组的问题。。您不需要实现元组返回值。您甚至不需要知道什么是元组。关于多次分配(如果您愿意,可以称为同时分配或矢量分配)。

1 个答案:

答案 0 :(得分:2)

我不会。他们是一个可怕的主意。只需在与要返回值的方法相同的类中使自己成为第二类即可。

public Class ReturnValue{public int age; public String name;}

或者您是否偏执

public Class ReturnValue{
    public final int age; 
    public final String name;
    public ReturnValue(int pAge, String pName){age=pAGe;name=pName;}
}

但是,如果真的只是替换一个元组,那有点冗长

可能是,一旦创建了这个小类,您可能会发现它很有用并最终向其添加方法,将公共变量设为私有(或以良好的构造函数结尾),然后再将其移入自己的文件中知道这是一个成熟的工作类,您一直都缺少,并且甚至不知道如果Java提供了元组,您就不会丢失。

通常我会遇到可变的公共变量问题,但是如果该类只是用作元组,那很好,那么将立即提取值。如果不是,那么您已经认识到该类的实用程序,应该将其重构为真实的类。

在您的示例中,您肯定缺少一门课。我建议:

class Func(String s, int i, double d) {
    final String s;
    final int i;
    final double d;

    public String sFunc() {
        return i + s + d;
    }
    public int iFunc() {
        return i + s.length() - (int) d;
    }

    public double dFunc() {
        return (double) i / s.length() + d;
    }
}

public class TupleAssignment {
    public static void main(String[] args) {
    private func=new Func("ABCDE", 2, 0.6);

    String s = sFunc();
    int i = iFunc();
    double d = dFunc();

    System.out.println(s + ", " + i + ", " + d);
}

重点是,当您想与一组变量进行交互时,它们很可能是相关的,如果将它们放入一个类中,您可能最终将它们留在那里并使用其他功能扩展该类。

如果您有拐杖,您可能不会创建所需的新课程,并可能尝试在一个课程中完成所有工作

相关问题