在Java中使用’=’运算符设置自定义类对象的值

我有一个自定义对象,它具有int类型的单个值,我想要进行处理以将此值保持在设置范围内。 我的问题是:给定以下类,我可以用myObject = 0设置它的值;

public class foo{ private int bar; public foo(){ } } 

而不是创建方法public void setBar()

如果你的意思是:

 foo x = new foo(); x = 10; // This is meant to set x.bar 

那么不,你不能用Java做到这一点。 好的,如果你问我……在可读性方面会很糟糕。

无法更改它以允许:

 foo x = 10; 

相当于:

 foo x = new foo(); x.bar = 10; // Or x.setBar(10); 

不,你不能那样做。 Java不支持运算符重载。 尽管+运算符因执行字符串连接而过载,但这是唯一的例外。 另一个使用=运算符的示例是在包装类的情况下,您可以直接将基本类型值分配给它的相应包装类型,这会导致原始值自动装箱到包装类型。

 Integer val = 10; // 10 is auto-boxed to Integer reference 

但它仅限于此目的。 您不能为自己的用户定义类型执行此操作。

创建方法是您唯一的选择。

Foo myObject = new Foo();

这里, myObject保存引用。 您不能将原始值(如0)分配给对象引用。

相反,你应该做myObject.setBar(10);

不,它违背了封装逻辑和Java本身。

另一种可能性,你可以公开这个领域。 它只需要在业务方法中进行所需的validation(在集合期间不需要)。

在Java中,惯例是提供setter和getter来更改对象的内部属性。 对于你的情况:

 foo instance = new foo(); instance.setBar(10); //Sets bar to 10 instance.getBar(); //returns bar's current value (right now 10) 

setter接收新值并设置它:

 public void setBar(int newBar) { bar = newBar; } 

并且getter可以访问字段的当前值:

 public int getBar() { return bar; } 

但是,您不能像在setBar那样重载=运算符,至少在Java中是这样。 如果您正在考虑,例如IntegerFloat包装器类,那里还有另一种工作,与Java的实现本身相关,后来推导出装箱拆箱的概念。