在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中是这样。 如果您正在考虑,例如Integer
或Float
包装器类,那里还有另一种工作,与Java的实现本身相关,后来推导出装箱和拆箱的概念。