[英]Can anyone give me a solution to my task with Generics and Comparable interface?
我写了一半,但不能 100% 正确。 任何人都可以帮助我吗?
这是我的问题:
编写一个参数化类 Triple 来表示某种类型的三重奏(例如,字符串三、整数等)。 对于三重类定义:
-getElement 方法接收一个整数(1,2 或 3)并返回相应的成员。 在非法参数的情况下,抛出一个 IllegalArgumentExpression 异常 -setElement,它接收两个参数:一个整数(1、2 或 3)和在相应位置作为三者中的一个成员放置的值(例如,setElement( 2,3) 将 3 设置为 trio 的 y 值) - 具有 3 个参数的构造函数,用于设置 Triple 的初始值
然后你应该编写 ComparableTriple 类,它代表三元组。 三元组的成员必须是可比较的(实现 Comparable 接口)。 然后扩展 ComparableTriple 类,实现 Comparable 接口,这样三元组就可以按位置进行比较了。 例如,(2,6,1) 在 (3,4,5) 之前但在 (2,6, -4) 之后。 相同的模板可以应用于字符串等。
主要代码示例:
三重 t1 = 新的 ComparableTriple<>(2, 6, 1); int x = t1.compareTo(t1); // 应该是 0
//Triple class I wrote
public class Triple<T> {
T x, y, z;
public Triple(T x, T y, T z) {
this.x = x;
this.y = y;
this.z = z;
}
public T getElement(int position) {
if (position == 1) {
return x;
} else if (position == 2) {
return y;
} else if (position == 3) {
return z;
} else throw new IllegalArgumentException();
}
public void setElement(int position, T value) {
if (position == 1) {
x = value;
} else if (position == 2) {
y = value;
} else if (position == 3) {
z = value;
} else throw new IllegalArgumentException(); }
}
我尝试编写 ComparableTriple 覆盖 CompareTo 方法,但找不到确切的解决方案。 它并没有那么复杂,但我是泛型的新手,无法弄清楚一些事情。 任何人都可以帮助我了解其余的代码吗?
public class Triple<T> implements Comparable<Triple<T>> {
... your code here
// functional interface Comparable will force you to override the method
}
但是您可能希望拥有某种 T 扩展的超类,以便您可以访问用于比较的字段。
例子:
public class Triple<T extends Number> implements Comparable<Triple<T>>
如果您不想承诺 T 是什么,当然可以与 Collections.sort(comparable) 进行内联比较。
这应该让你开始。 如果您遇到困难,请回发/编辑。 干杯。
(这不是有意的解决方案)。 泛型是一种痛苦,需要努力通过才能擅长。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.