用Java重写赋值运算符

kCC*_*kCC 0 java

有没有办法在Java中覆盖赋值运算符?

例如,我总是可以这样做:

AJSDate startDate = new AJSDate("20090811");
Run Code Online (Sandbox Code Playgroud)

但我宁愿把它当作:

AJSDate startDate = "20090811";
Run Code Online (Sandbox Code Playgroud)

La-*_*eja 6

不,Java不支持运营商的重载.

您甚至无法扩展String来执行以下操作:

class AJSDate extends String {
}

public class HelloWorld {
     public static void main(String []args){
        AJSDate ajs = "This is a test";
        System.out.println(ajs);
     }
}
Run Code Online (Sandbox Code Playgroud)

您将收到以下编译时错误:

error: cannot inherit from final String 
Run Code Online (Sandbox Code Playgroud)

(用于尝试扩展String - String是一个最终类,这意味着它无法扩展)

error: incompatible types 
Run Code Online (Sandbox Code Playgroud)

(对于AJSDate ajs = "This is a test";- 运算=符两侧的操作数不是类型兼容的.)

如果您真的想编写一个允许运算符重载的程序,请使用其他语言,如C++,Scala或Ruby.

一个更小的问题,但是如果你想创建一个具有另一个对象功能的对象(即,扩展另一个对象),那么在风格上,你可能想要用它的父类名来结束它的类名.例如,如果它扩展了类Foo,则将其命名为AJSDateFoo.

  • 我认为这是一个糟糕的例子.即使你可以扩展`String`,那也行不通.这就像尝试`Child childRef = new Parent();`. (2认同)