这是我发现有趣的已删除问题的副本。
public class Swap<A,B> { private A first; private B second; public Swap(A first, B second) { this.second = second; this.first = first; } void setFirst (A first) { this.first = first; } void setSecond(B second) { this.second = second; } A getFirst() { return first; } B getSecond() { return second;} void swap(Pair[]pairs,A first,B second) { Pair temp=pairs[first]; pairs[first]=pairs[second]; pairs[second]=temp; } }我对 swap 方法的实现有点困惑,请帮助我修复它。
如果一个类
Swap被声明为通用的,那么任意类型的对象都不能在它的实例中重新排列。AB但是,您可以创建该类的新类型实例
Swap并更改其中参数的顺序:测试:
first仅当参数和second具有相同的公共类型时,经典的正确排列才有效A:当然,可以为“原始”(未类型化)类型编写实现
swap(参见最近的类似问题如何List<Integer>添加类型的对象String?),但是,使用这样的类会很困难:例如,“重新排列”实例中的字段
baz:现在,在这样的交换之后,所有关于实例中对象类型的信息都
swap将丢失,例如,将无法使用 getters / setters:ClassCastException:结果: