如何在java-objects上使用+ - * /等操作

时间:2013-06-04 15:33:06

标签: java class methods wrapper fractions

我需要编写一个java-class“Fraction”。

这个类应该能够理解基本的算术运算,如+, - ,*,/。我找到了许多“分数”类并理解它们,但都使用“ f1.add(f2); ”等方法(f1,f2是分数的对象,例如:

f1 = new Fraction(1,5);
f2 = new Fraction(2,5);

我需要的是直接操作,例如整数操作,例如:

**f1 = f1 + f2;**

而不是

f1.add(f2);

4 个答案:

答案 0 :(得分:6)

你不能:java不允许重载运算符。

答案 1 :(得分:1)

这在标准Java中是不可能的。

正如你在评论中明确提到的那样:我建议使用 Scala (与 Groovy 相比),因为它是类型安全的(在许多其他优点中),并且它也是一种JVM语言:

class Fraction(val n: Int, val d: Int) {
  override def toString = s"$n/$d"

  def +(that: Fraction) = new Fraction(this.n + that.n, this.d)
}

object FractionDemo extends App {
  val f1 = new Fraction(1, 4)
  val f2 = new Fraction(2, 4)
  val f3 = f1 + f2
  println(s"$f1 + $f2 = $f3")
}

,输出

  

1/4 + 2/4 = 3/4

我知道+没有正确实现,这只是一个小例子。

如果您对 Scala 的数字库感兴趣,请查看spire,它已经有Fractional类。

答案 2 :(得分:0)

正如eternay所说,Java不支持运营商重载。您可以查看Groovy。它是一种类似Java的基于JVM的语言,它支持运算符重载。

答案 3 :(得分:0)

如果您对基于JVM的支持运算符重载的语言感兴趣,可以尝试使用Groovy。 在这里看一些讨论: Operator overloading in Java