与Python不同,Java本机不支持元组。因此,is并没有提供元组赋值这样有用的可能性。
你将如何实施它?您的解决方案应该是:
- 尽可能具有普遍性
- 尽可能具有可读性
- 在分配位置不包含临时变量
- 允许使用实用程序方法,但只能使用静态方法。不应创建或导入任何元组类。不应使用任何数组或集合
我将举一个简单的例子。不要太关注*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
但是需要额外的变量s1
、i1
、d1
。如果你试图通过这种方式摆脱它们:
s = sFunc(s, i, d);
i = iFunc(s, i, d);
d = dFunc(s, i, d);
你会得到错误的结果:
2ABCDE0.6, 11, 1.8222222222222224
如何获得符合上述四个要求的先前结果?如果你看到一个很好的部分解决方案,也可以把它作为一个答案。
请注意,这个问题与制作Tuples无关。您不需要实现元组返回值。你甚至不需要知道元组是什么。它是关于多重赋值(如果你愿意,可以称之为同时赋值或向量赋值(。
我不会。这是个糟糕的主意。只需使自己成为与要返回值的方法位于同一类中的第二个小类。
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;}
}
但如果它真的只是替换一个元组,那就有点冗长了
一旦你创建了这个小类,你可能会发现它很有用,并最终向它添加方法,使公共变量私有(或具有良好构造函数的final(,并将其移动到它自己的文件中——在你知道它是一个完整的工作类之前,你一直都缺少它,如果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);
}
关键是,当你想与一组变量交互时,它们很可能是相关的,如果你把它们放在一个类中,你可能会把它们留在那里,并用额外的功能扩展该类。
如果你有拐杖,你可能不会创建你需要的新类,可能会尝试在一个类中完成所有事情