Java中的重写赋值运算符

Java中的重写赋值运算符,java,Java,是否有方法重写Java中的赋值运算符 例如,我总是可以这样做: AJSDate startDate = new AJSDate("20090811"); 但我更希望它是: AJSDate startDate = "20090811"; 不支持。Java不支持运算符重载 您甚至不能扩展字符串来执行以下操作: class AJSDate extends String { } public class HelloWorld { public static void main(Strin

是否有方法重写Java中的赋值运算符

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

AJSDate startDate = new AJSDate("20090811");
但我更希望它是:

AJSDate startDate = "20090811";

不支持。Java不支持运算符重载

您甚至不能扩展字符串来执行以下操作:

class AJSDate extends String {
}

public class HelloWorld {
     public static void main(String []args){
        AJSDate ajs = "This is a test";
        System.out.println(ajs);
     }
}
您将得到以下编译时错误:

error: cannot inherit from final String 
(用于尝试扩展字符串-字符串是最后一个类,这意味着它无法扩展)

(对于
AJSDate ajs=“这是一个测试”
-运算符两边的操作数类型不兼容。)

如果您真的想编写一个允许操作符重载的程序,使用另一种语言,如C++、斯卡拉或Ruby。


更次要的一点是,如果您希望创建一个具有另一个对象功能的对象(即扩展另一个对象),那么在风格上,您可能希望以其父类的名称结束其类的名称。例如,如果它扩展了类Foo,则称之为AJSDateFoo。

否。Java不支持运算符重载

您甚至不能扩展字符串来执行以下操作:

class AJSDate extends String {
}

public class HelloWorld {
     public static void main(String []args){
        AJSDate ajs = "This is a test";
        System.out.println(ajs);
     }
}
您将得到以下编译时错误:

error: cannot inherit from final String 
(用于尝试扩展字符串-字符串是最后一个类,这意味着它无法扩展)

(对于
AJSDate ajs=“这是一个测试”
-运算符两边的操作数类型不兼容。)

如果您真的想编写一个允许操作符重载的程序,使用另一种语言,如C++、斯卡拉或Ruby。


更次要的一点是,如果您希望创建一个具有另一个对象功能的对象(即扩展另一个对象),那么在风格上,您可能希望以其父类的名称结束其类的名称。例如,如果它扩展了类Foo,就称它为AJSDateFoo。

而不是Java本身。不幸的是,对于那些运算符重载很有用的情况


然而,由于操作符重载基本上是语法糖,JVM并不禁止它。其他JVM语言(如Scala)有一些运算符重载支持。

不在Java中。不幸的是,对于那些运算符重载很有用的情况


然而,由于操作符重载基本上是语法糖,JVM并不禁止它。其他JVM语言(如Scala)有一些运算符重载支持。

不,您不能让您这样做。使用set方法,而不是考虑运算符重载overload,而不是overriding-overriding意味着替换父类的功能(或在除Java之外的其他语言中,父命名空间)。运算符重载意味着根据其上下文为运算符编写附加功能。不,您不能让您这样做。使用set方法,而不是考虑运算符重载overload,而不是overriding-overriding意味着替换父类的功能(或在除Java之外的其他语言中,父命名空间)。运算符重载意味着根据其上下文为运算符编写附加功能。我认为这是一个糟糕的例子。即使您可以扩展
字符串
,这也行不通。这就像尝试执行
Child childRef=new Parent()。本示例的重点是说明缺少变通方法的其他原因,而不是其他原因。字符串在Java中是独一无二的,因为它们在许多方面同时充当原语和对象。如果Java维护人员决定允许对String进行扩展,Java将需要制定一个策略,以确定类似原语的赋值是否以及如何在String的子类中工作。至少在理论上,我不明白为什么这是不可能实现的。毕竟,Java被扩展为允许原语类型包装类的自动装箱,这带来了一个不那么不同的问题。仅供参考-这里有一个链接,解释了字符串和包装类是不可变的,并且最终可以维护原语的按值调用。但不需要按值调用,许多语言都成功地使用了按引用调用。“这个例子的目的是为了说明缺乏变通办法的其他一些原因……”——这是一个
#Fail
。它实际上表明特定的解决方法不起作用。但这种特定的解决方法有很多负面影响,很可能会排除它。。。即使它“起作用”。例如,String的大多数方法在“date”对象上没有意义,我认为这是一个糟糕的例子。即使您可以扩展
字符串
,这也行不通。这就像尝试执行
Child childRef=new Parent()。本示例的重点是说明缺少变通方法的其他原因,而不是其他原因。字符串在Java中是独一无二的,因为它们在许多方面同时充当原语和对象。如果Java维护人员决定允许对String进行扩展,Java将需要制定一个策略,以确定类似原语的赋值是否以及如何在String的子类中工作。至少在理论上,我不明白为什么这是不可能实现的。毕竟,Java被扩展为允许原语类型包装类的自动装箱,这带来了一个不那么不同的问题。仅供参考-这里有一个链接,解释了字符串和包装类是不可变的,并且最终可以维护原语的按值调用。但不需要按值调用,许多语言都成功地使用了按引用调用。“这个例子的目的是为了说明缺乏变通办法的其他一些原因……”——这是一个
#Fail
。它实际上表明特定的解决方法不起作用。但这种特定的解决方法有很多负面影响,很可能会排除它。。。即使它“起作用”。例如,String的大多数方法在“date”对象上没有意义。