java 中泛型 class 中的 double 方法
double method inside a generic class in java
我正在尝试创建一个通用的 class,它可以使用 java 中的 3 个数字(在我的例子中是 int、float 和 double)。
在这个 class 中,我想要一个 double 方法,该方法将 return 3 的最大数量,但我遇到了麻烦 return因为它是通用的 class.
class Triple<T extends Comparable> {
T a;
T b;
T c;
public Triple(T a, T b, T c) {
this.a = a;
this.b = b;
this.c = c;
}
double max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return (double) a;
} else {
if (b.compareTo(c) > 0) {
return (double) b;
} else {
return (double) c;
}
}
}
}
这是我目前所拥有的,但是当用整数测试它时,我得到以下错误:
java.lang.ClassCastException: java.lang.Integer 无法转换为 java.lang.Double
关于如何从泛型 return 原始类型的任何帮助 class?
只是 return T
而不是 double
T max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return a;
} else {
if (b.compareTo(c) > 0) {
return b;
} else {
return c;
}
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Triple<Integer> test = new Triple<>(1, 4, 5);
System.out.println(test.max());
}
}
class Triple<T extends Number<T> & Comparable<T>> {
T a;
T b;
T c;
public Triple(T a, T b, T c) {
this.a = a;
this.b = b;
this.c = c;
}
double max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return a.doubleValue();
} else {
if (b.compareTo(c) > 0) {
return b.doubleValue();
} else {
return c.doubleValue();
}
}
}
}
您可以使用泛型扩展 Comparable 和 Number。这样我们就可以调用 Number class 中的 doubleValue()
而不是将其转换为 double.
class Triple<T extends Number & Comparable> {
T a;
T b;
T c;
public Triple(T a, T b, T c) {
this.a = a;
this.b = b;
this.c = c;
}
double max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return a.doubleValue();
} else {
if (b.compareTo(c) > 0) {
return b.doubleValue();
} else {
return c.doubleValue();
}
}
}
}
public class Main {
public static void main(String[] args) {
Triple<Integer> triple = new Triple<>(1, 2, 3);
System.out.println(triple.max());
}
}
我正在尝试创建一个通用的 class,它可以使用 java 中的 3 个数字(在我的例子中是 int、float 和 double)。
在这个 class 中,我想要一个 double 方法,该方法将 return 3 的最大数量,但我遇到了麻烦 return因为它是通用的 class.
class Triple<T extends Comparable> {
T a;
T b;
T c;
public Triple(T a, T b, T c) {
this.a = a;
this.b = b;
this.c = c;
}
double max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return (double) a;
} else {
if (b.compareTo(c) > 0) {
return (double) b;
} else {
return (double) c;
}
}
}
}
这是我目前所拥有的,但是当用整数测试它时,我得到以下错误:
java.lang.ClassCastException: java.lang.Integer 无法转换为 java.lang.Double
关于如何从泛型 return 原始类型的任何帮助 class?
只是 return T
而不是 double
T max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return a;
} else {
if (b.compareTo(c) > 0) {
return b;
} else {
return c;
}
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Triple<Integer> test = new Triple<>(1, 4, 5);
System.out.println(test.max());
}
}
class Triple<T extends Number<T> & Comparable<T>> {
T a;
T b;
T c;
public Triple(T a, T b, T c) {
this.a = a;
this.b = b;
this.c = c;
}
double max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return a.doubleValue();
} else {
if (b.compareTo(c) > 0) {
return b.doubleValue();
} else {
return c.doubleValue();
}
}
}
}
您可以使用泛型扩展 Comparable 和 Number。这样我们就可以调用 Number class 中的 doubleValue()
而不是将其转换为 double.
class Triple<T extends Number & Comparable> {
T a;
T b;
T c;
public Triple(T a, T b, T c) {
this.a = a;
this.b = b;
this.c = c;
}
double max() {
if (a.compareTo(b) > 0 && a.compareTo(c) > 0) {
return a.doubleValue();
} else {
if (b.compareTo(c) > 0) {
return b.doubleValue();
} else {
return c.doubleValue();
}
}
}
}
public class Main {
public static void main(String[] args) {
Triple<Integer> triple = new Triple<>(1, 2, 3);
System.out.println(triple.max());
}
}