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

使用泛型类执行基本算术运算

桂志诚
2023-03-14

我想执行基本的算术运算,如加法,减法,乘法和除法,每个操作仅使用一个通用方法,用于包装类型,如整数浮点数...(不包括BigDecimalBigENTger)。

我尝试使用泛型类做如下(用于添加)。

public final class GenericClass<E extends Number> {

    public E add(E x, E y) {
        return x + y; // Compile-time error
    }
}

它会发出编译时错误,

运算符不能应用于E,E

有没有办法使用这种通用版本来实现这种操作?

共有3个答案

寇靖
2023-03-14

我所能想到的就是将该类型作为未知类型接收并使用的实例。

像这样的东西:

public class GenericClass<? extends Number>{
    public Integer add(? x, ? y){
        if(x instance of Integer && y instance of Integer){
            //Do your math with Integer class methods help
            //Return here
        }
        return (Interger)null;
    }

} 

但不确定:/

黄锋
2023-03-14

不,您不能这样做,因为运算符不是数字类的一部分。您可以做的是创建一个抽象基类并从中扩展:

static void test() {

    MyInteger my = new MyInteger();
    Integer i = 1, j = 2, k;
    k = my.add(i, j);
    System.out.println(k);
}

static public abstract class GenericClass<E extends Number> {
    public abstract E add(E x, E y);
}

static public class MyInteger extends GenericClass<Integer> {
    @Override
    public Integer add(Integer x, Integer y) {
        return x + y;
    }       
}

(我将这些类设为静态以方便测试,但您可以删除此修饰符。)

您还可以添加一个抽象函数,该函数将获取并返回类型Number的参数和返回值,并重写它和子类,但返回值所需的强制转换将使其无效。

钱志义
2023-03-14

不,没有办法做到这一点,否则它将被内置到Java中。类型系统不够强大,无法表达此类内容。

 类似资料:
  • 问题内容: 我想对像,,…(不包括和)这样的包装器类型,每个操作仅使用一种通用方法执行基本的算术运算,例如加法,减法,乘法和除法。 我尝试使用泛型类执行以下操作(作为补充)。 它发出一个编译时错误, 运算符+不能应用于E,E 有没有办法使用这种通用版本来实现这种操作? 问题答案: 不,没有办法做到这一点,否则它将内置到Java中。类型系统不够强大,无法表达这种东西。

  • 我有一个具有两个数据成员的泛型类。这是我写的一段代码 我想对num1和num2进行简单的算术运算,比如加法和减法,我还想进行简单的二进制运算,比如 但是这是不允许的,那么有人能告诉我如何执行这些任务吗?

  • 本文向大家介绍C#程序执行所有基本算术运算,包括了C#程序执行所有基本算术运算的使用技巧和注意事项,需要的朋友参考一下 C#中的基本算术运算符包括以下内容- 运算符 描述 + 加两个操作数 -- 从第一个减去第二个操作数 * 将两个操作数相乘 / 将分子除以除分子 % 模运算符和整数除后的余数 ++ 增量运算符将整数值增加一 - 减法运算符将整数值减一 要添加,请使用加法运算符- 同样,它适用于减

  • 我们将在这个部分讲解有关布尔型、数字型和字符型的相关知识。 表达式是一种特定的类型的值,它可以由其它的值以及运算符组合而成。每个类型都定义了可以和自己结合的运算符集合,如果你使用了不在这个集合中的运算符,则会在编译时获得编译错误。 一元运算符只可以用于一个值的操作(作为后缀),而二元运算符则可以和两个值或者操作数结合(作为中缀)。 只有两个类型相同的值才可以和二元运算符结合,另外要注意的是,Go

  • 问题内容: 我最近注意到Java关于Java基本算术运算的特质。用下面的代码 我收到“类型不匹配”的编译错误… 都是基本的算术运算在Java中(,,,)只能对原始数据类型进行和高阶(,,等),而在算术运算和是第一投地,然后评估? 问题答案: 上的操作,并且被加宽到除非编译器可以确定该值的范围。 但 BTW即使发生溢出也会编译。:]

  • 一、数据类型 1.1 类型支持 Scala 拥有下表所示的数据类型,其中 Byte、Short、Int、Long 和 Char 类型统称为整数类型,整数类型加上 Float 和 Double 统称为数值类型。Scala 数值类型的取值范围和 Java 对应类型的取值范围相同。 数据类型 描述 Byte 8 位有符号补码整数。数值区间为 -128 到 127 Short 16 位有符号补码整数。数值