Even If we had 2 or more classes w/ the exactly same code, Java would still “see” them as different from each:
void setup() {
MyVec vec1 = new MyVec();
MyVecTwin vec2 = new MyVecTwin();
println(MyVec.class.isInstance(vec1)); // true
println(MyVec.class.isInstance(vec2)); // false
exit();
}
class MyVec {
float x = random(-100, 100), y = random(-100, 100), z;
@Override String toString() {
return "[ " + x + ", " + y + ", " + z + " ]";
}
}
class MyVecTwin { // exactly same code as class MyVec
float x = random(-100, 100), y = random(-100, 100), z;
@Override String toString() {
return "[ " + x + ", " + y + ", " + z + " ]";
}
}
So it doesn’t matter if a class got structurally the same members as another 1; under Java’s PoV, they’re not the same!
In my previous reply, I’ve instantiated a Comparator which can be used to sort() any array or list of objects which implements
the DoubleSupplier datatype.
If we needed to sort() a container of PVector objects instead, we’d need to change the Comparator’s generic datatype DoubleSupplier to PVector.
Plus, switch method DoubleSupplier::getAsDouble() to field PVector::x inside method Comparator::compare()'s implementation:
import java.util.Comparator;
import java.util.Arrays;
//import java.util.Collections;
static final Comparator<PVector> ASCENT_X = new Comparator<PVector>() {
@Override final int compare(final PVector v1, final PVector v2) {
return (int) Math.signum(v1.x - v2.x);
}
};
Still, we couldn’t sort() neither an array of MyVec nor of MyVecTwin w/ the Comparator<PVector> above; even though they’ve both got the field x in common, just like a PVector:
import java.util.Comparator;
import java.util.Arrays;
//import java.util.Collections;
static final Comparator<PVector> ASCENT_X = new Comparator<PVector>() {
@Override final int compare(final PVector v1, final PVector v2) {
return (int) Math.signum(v1.x - v2.x);
}
};
final PVector[] vecs = {
PVector.random2D(this).mult(100),
PVector.random2D(this).mult(100),
PVector.random2D(this).mult(100)
};
final MyVec[] myVecs = { new MyVec(), new MyVec(), new MyVec() };
class MyVec {
float x = random(-100, 100), y = random(-100, 100), z;
@Override String toString() {
return "[ " + x + ", " + y + ", " + z + " ]";
}
}
void setup() {
println(vecs);
Arrays.sort(vecs, ASCENT_X);
println(vecs);
println();
println(myVecs);
//Arrays.sort(myVecs, ASCENT_X); // Error: MyVec isn't a PVector!!!
//println(myVecs);
exit();
}