Java 中泛型类中的 double 方法



我正在尝试创建一个通用类,该类可以在java中使用3个数字(在我的例子中为int,float和double(。

在这个类中,我想要一个返回 3 的最大数量的 double 方法,但我在返回双精度时遇到了麻烦,因为它是一个泛型类。

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

有关如何从泛型类返回基元类型的任何帮助?

您可以使用通用扩展可比和数字。这样,我们可以调用 Number 类中存在的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());
    }
}

只需返回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();
        }
    }
  }
}

相关内容

最新更新