是否存在可变4维元组的Java实现?
MutableTuple4<Intger, Integer, Double, Double> a;
a.setFirst(a.getFirst() + 1);
答案 0 :(得分:2)
没有内置的通用Tuple4类,但是你可以轻松编写自己的通用任意长度的Tuple类,并且有许多实现可用于基本代码,例如{ {3}}(apache.commons.MutableTriple)。
还有source code here库提供了最多10个元素的不可变元组,您可以根据这些元素进行实现(虽然我没有亲自使用它)。也许你可以问问自己,你是否需要可变性?
事实上,正如其他人已经提到的那样,我强烈质疑具有任意值类型的可变对象的有效性 - 通常更好地将特定概念封装在一个类中而不仅仅是传递#34 ;价值观袋&#34;。
除了注意事项之外,这是一个示例实现,基于上面提到的可以构建的apache MutableTriple类。与往常一样,您需要在多线程环境中使用可变变量时要非常谨慎:不要以任何方式考虑此代码线程安全(我通常更喜欢不可变性而不是可变性)。
public class MutableTuple4<A, B, C, D> {
private static final long serialVersionUID = 1L;
public A first;
public B second;
public C third;
public D fourth;
public MutableTuple4(A a, B b, C c, D d) {
this.first = a;
this.second = b;
this.third = c;
this.fourth = d;
}
public A getFirst() {
return this.first;
}
public void setFirst(A first) {
this.first = first;
}
// remaining getters and setters here...
// etc...
@Override
public int hashCode() {
int hash = 3;
hash = 23 * hash + Objects.hashCode(this.first);
hash = 23 * hash + Objects.hashCode(this.second);
hash = 23 * hash + Objects.hashCode(this.third);
hash = 23 * hash + Objects.hashCode(this.fourth);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Tuple<A, B, C, D> other = (Tuple<A, B, C, D>) obj;
if (!Objects.equals(this.first, other.first)) {
return false;
}
if (!Objects.equals(this.second, other.second)) {
return false;
}
if (!Objects.equals(this.third, other.third)) {
return false;
}
if (!Objects.equals(this.fourth, other.fourth)) {
return false;
}
return true;
}
}
答案 1 :(得分:1)
有,但它专门用于矢量数学,特别是Java3D:
不适用于一般用途的tupling。并且它不允许您像示例节目那样混合整数和双精度。
就像JB Nizet在评论中所说,课程通常更合适。