java中的可变四维元组

java中的可变四维元组,java,tuples,mutable,Java,Tuples,Mutable,是否有针对可变四维元组的Java实现 MutableTuple4<Intger, Integer, Double, Double> a; a.setFirst(a.getFirst() + 1); mutabletuple4a; a、 setFirst(a.getFirst()+1); 有,但它专门用于向量数学,尤其是Java3D: 不适用于一般用途的tupling。它不允许你混合整数和双精度,就像你的例子所示 正如JB Nizet在评论中所说,类通常更合适。有,但它专门用于向量

是否有针对可变四维元组的Java实现

MutableTuple4<Intger, Integer, Double, Double> a;
a.setFirst(a.getFirst() + 1);
mutabletuple4a;
a、 setFirst(a.getFirst()+1);

有,但它专门用于向量数学,尤其是Java3D:

不适用于一般用途的tupling。它不允许你混合整数和双精度,就像你的例子所示


正如JB Nizet在评论中所说,类通常更合适。

有,但它专门用于向量数学,尤其是Java3D:

不适用于一般用途的tupling。它不允许你混合整数和双精度,就像你的例子所示


正如JB Nizet在评论中所说,类通常更合适。

有,但它专门用于向量数学,尤其是Java3D:

不适用于一般用途的tupling。它不允许你混合整数和双精度,就像你的例子所示


正如JB Nizet在评论中所说,类通常更合适。

有,但它专门用于向量数学,尤其是Java3D:

不适用于一般用途的tupling。它不允许你混合整数和双精度,就像你的例子所示


正如JB Nizet在评论中所说,类通常更合适。

没有内置的通用Tuple4类,但是您可以轻松地编写自己的通用任意长度的Tuple类,并且有许多实现可用于代码基础,例如()

还有一个库,它提供了不可变元组,长度可达10个元素,您可以基于这些元素来实现(尽管我个人没有使用过它)。也许你可以问问自己是否需要可变性

事实上,正如其他人已经提到的,我强烈质疑具有任意值类型的可变对象的有效性——通常在类中封装特定的概念比传递“值包”要好

除此之外,这里有一个示例实现,它基于上面提到的ApacheMutableTriple类,可以构建在这个类的基础上。与往常一样,在多线程环境中,您需要非常谨慎地使用可变变量:不要以任何方式考虑此代码THealSead(我通常倾向于在任何可能的情况下都是不可变的)。
公共类MutableTuple4{
私有静态最终长serialVersionUID=1L;
公众优先;
公共B秒;
公共C第三;
第四次公开辩论;
公共可变元组4(aa,bb,cc,dd){
第一个=a;
这个秒=b;
这三分之一=c;
这四分之一=d;
} 
公共A getFirst(){
先把这个还给我;
}
公共空间优先(A优先){
this.first=first;
}
//剩下的接球手和二传手。。。
//等等。。。
@凌驾
公共int hashCode(){
int hash=3;
hash=23*hash+Objects.hashCode(this.first);
hash=23*hash+Objects.hashCode(this.second);
hash=23*hash+Objects.hashCode(这是第三个);
hash=23*hash+Objects.hashCode(这是第四个);
返回散列;
}
@凌驾
公共布尔等于(对象obj){
if(obj==null){
返回false;
}
如果(getClass()!=obj.getClass()){
返回false;
}
最终元组other=(元组)obj;
如果(!Objects.equals(this.first,other.first)){
返回false;
}
如果(!Objects.equals(this.second,other.second)){
返回false;
}
如果(!Objects.equals(this.third,other.third)){
返回false;
}
如果(!Objects.equals(this.fourth,other.fourth)){
返回false;
}
返回true;
} 
}

没有内置的通用Tuple4类,但您可以轻松编写自己的通用任意长度的Tuple类,并且有许多实现可用于代码基础,例如()

还有一个库,它提供了不可变元组,长度可达10个元素,您可以基于这些元素来实现(尽管我个人没有使用过它)。也许你可以问问自己是否需要可变性

事实上,正如其他人已经提到的,我强烈质疑具有任意值类型的可变对象的有效性——通常在类中封装特定的概念比传递“值包”要好

除此之外,这里有一个示例实现,它基于上面提到的ApacheMutableTriple类,可以构建在这个类的基础上。与往常一样,在多线程环境中,您需要非常谨慎地使用可变变量:不要以任何方式考虑此代码THealSead(我通常倾向于在任何可能的情况下都是不可变的)。
公共类MutableTuple4{
私有静态最终长serialVersionUID=1L;
公众优先;
公共B秒;
公共C第三;
第四次公开辩论;
公共可变元组4(aa,bb,cc,dd){
第一个=a;
这个秒=b;
这三分之一=c;
这四分之一=d;
} 
公共A getFirst(){
先把这个还给我;
}
公共空间优先(A优先){
this.first=first;
}
//剩下的接球手和二传手。。。
//等等。。。
@凌驾
公共int hashCode(){
int hash=3;
hash=23*hash+Objects.hashCode(this.first);
hash=23*hash+Objects.hashCode(this.second);
hash=23*hash+Objects.hashCode(这是第三个);
hash=23*hash+Objects.hashCode(这是第四个);
返回散列;
}
@凌驾
公共布尔等于(对象obj){
if(obj==null){
返回false;
}
如果(getClass()!=obj.getClass()){
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;    
    } 

}