当前位置: 首页 > 知识库问答 >
问题:

java中泛型类中的双方法

拓拔辰钊
2023-03-14

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

在这个类中,我需要一个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。郎.双

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

共有3个答案

冯通
2023-03-14
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();
        }
    }
  }

}
韩阳云
2023-03-14

只需返回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;
        }
    }
}
空俊语
2023-03-14

您可以使用通用扩展名Compariable和Number。这样,我们可以调用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());

    }
}
 类似资料:
  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 问题内容: 在Java中,我希望具有以下内容: 但是我明白了 我对基本用途以外的泛型没有什么了解,因此对此没有多大意义。我无法在互联网上找到有关该主题的很多信息,这无济于事。 有人可以通过类似的方式澄清这种使用是否可行吗?另外,为什么我最初的尝试失败了? 问题答案: 你不能在静态方法或静态字段中使用类的泛型类型参数。该类的类型参数仅在实例方法和实例字段的范围内。对于静态字段和静态方法,它们在类的所

  • 问题内容: 您认为可以创建类似的东西吗? 问题答案: 是的你可以。 用法示例:

  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • 问题内容: 在C#中,我实际上可以这样做: 但是由于某种原因,我无法使其在Java中工作。 我要做的是在超类上创建一个静态方法,以便可以将子类转换为XML。 问题答案: 称为: 或更明确地: 更令人困惑的是,您可以拥有既构造泛型类型又具有泛型参数的构造函数。不记得该语法,也从未在愤怒中使用过它(无论如何,最好还是使用静态创建方法)。 强制转换是不安全的,并且您不能编写T.class。因此,将T.c