【问题标题】:Is it possible to add classes? [duplicate]可以加类吗? [复制]
【发布时间】:2014-12-13 19:12:33
【问题描述】:

我知道 String 是 java.lang 中的 final 类,所以像 string 类一样可以用加号 (+) 运算符附加其他类。

例如我有一个类:

 public class Foo{
    public int x;
    public int y;
    public Foo(int x,int y){
       this.x=x;
       this.y=y;
    }
    public Foo append(int x,int y){
       return new Foo(this.x+x,this.y+y);
    }
 }

现在,是否可以像这样添加两个类:

 Foo a=new Foo(2,3),b=new Foo(3,4);
 Foo c=a+b;
 System.out.println(c.x+"  "+c.y);

得到这样的输出:

 5  7

如果是,我还需要做什么?如果不是,为什么?

【问题讨论】:

  • Foo c = a.append(b.x, b.y)
  • 我知道我可以使用它,这就是我包含该命令但我想使用 + 运算符执行相同功能的原因
  • 我相信 C++ 有这个功能,为什么在 java 中没有呢?
  • 因为 C++ 和 Java 是两种不同的语言,选择可能不同
  • 另外,您可以问:为什么不能定义一个名为 + 的方法,为什么不能使用中缀表示法调用方法(就像在 Scala 中一样)。

标签: java operator-keyword addition


【解决方案1】:

'多年来,Java 团队的部分内容是“运算符重载太复杂”。这个和许多其他人显然没有做功课的决定就是为什么我以鄙视 Gosling 和 Java 团队做出的许多选择而闻名的原因 - Bruce Eckel 在The Positive Legacy of C++ and Java

【讨论】:

  • 这可以使用更多的上下文,而不仅仅是一个不能直接回答问题的引述。但这是一个不错的小发现。为此 +1。
【解决方案2】:

No Java 不允许运算符重载simply because it doesn't need it

2.2.7 不再有运算符重载 没有提供程序员可以重载标准算术运算符的方法。再一次,通过声明一个类、适当的实例变量和适当的方法来操作这些变量,可以很容易地实现运算符重载的效果。消除运算符重载可以极大地简化代码。

【讨论】:

  • “它不需要它”[需要引用]
  • "simply because it doesn't need it" - 这是非常基于意见的,我喜欢 C++ 中的这个特性
  • 好吧,我认为某些类能够重载运算符会很好。即使对于某些内置类,它也可能很有用,例如用于字符串的 * 运算符。但是,我承认这并不是真正必要的,而且过多的运算符会使代码不可读(就像在 Scala 中一样,无论如何我都喜欢它)。
  • @manouti 我认为这个理由是废话,但你会因为添加它而获得支持:)
  • 不需要它的想法暗示了这样一个事实,即没有它也可以很容易地完成,并且没有它所有潜在的复杂性。当然这是基于意见的,但这是一个设计决定。
【解决方案3】:

它被称为operator overloading,不,这在 Java 中是不可能的。只允许使用经典方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2018-04-17
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多