我知道java不支持运算符重载,并且我可以缩短方法名称。 但是有没有其他方法来缩短一些表达式,如:
MyClass obj = new MyClass();
obj.setValue(2);
int a = obj.getValue();
并接近这个:
obj = 2;
int a = obj;
答案 0 :(得分:1)
在简洁方面你可以做的“最好的”不是使用getter和setter而只是公开这个领域。但这是一个坏主意:它打破了封装,但我想不会比getter / setter对更多。
MyClass
{
public int foo;
}
MyClass obj = new MyClass();
obj.foo = 2;
int a = obj.foo;
如果你想要它特别短,你可以使用短(又名坏)字段名称:
MyClass
{
public int a;
}
MyClass obj = new MyClass();
obj.a= 2;
int a = obj.a;
或 - 我认为这很明显 - 使用较短的函数名称:
MyClass
{
private int foo;
public int a() { return foo; }
public void b(int newFoo) { foo = newFoo; }
}
我建议您不编写遵循以上任何建议的任何代码。
回复你的编辑,
如果我有某种列表结构,那我该怎么办? 比listObj.add(5)
更短
你没有。这里优化 nothing 。在技术上有一些方法可以让你的方法名称缩短,但为什么你想要? 这是三个字符。
答案 1 :(得分:0)
你可以压缩
MyClass obj = new MyClass();
obj.setValue(2);
到
MyClass obj = new MyClass(2);
如果您为MyClass创建构造函数,如
public MyClass(int value) {
setValue(value);
}
但我不知道更短的版本。
答案 2 :(得分:0)
如果你使变量公开,你就可以接受它了:
class A{
public int x;
}
以下是访问方式:
A a= new A();
a.x = 500;
int xy = a.x;
答案 3 :(得分:0)
更短不是更好!获得正确的逻辑并使用足够长的名称以使其有用。别担心;你不可能指责更长的名字。
liveData
和obj
这样的名字简直太糟糕了。他们没有说明构造的域角色。名称需要有意义。他们应该反映角色,而不是实施。
人们必须保持你的废话。不要混淆你的代码。
答案 4 :(得分:-1)
如果您的对象只包含int
这样的原语,您可以直接使用原语。
int obj = 2; // although obviously "obj" is a bad name now!
int a = obj;
如果由于某种原因你需要它作为一个对象,你可以使用相应的包装类,例如Integer
:
Integer obj = Integer.valueOf(2);
int o = obj.intValue();
但是,由于Java提供 autoboxing 来自动转换基元和它们的官方包装器对象:
Integer obj = 2; // auto-boxing wraps the int in an Integer
int a = obj; // auto-unboxing extracts the int from the Integer
如果你想定义自己的类(这可能是一个好主意,例如,强制类型约束),你可以使用构造函数而不是setter方法进行设置:
Age age = new Age(42); // I assume I don't need to explain how to write the constructor
int a = age.value(); // You could call it getValue(), but unless you need a bean, why?
最后一个例子是我给出的唯一一个适用于value
的对象而不是原语的例子。在工厂方法中使用时,它具有相当的表现力和简洁性:
// With setter
public Age getAge() {
Age age = new Age();
age.setValue(currentYear - yearOfBirth);
return age;
}
// with constructor parameter
public Age getAge() {
return new Age(currentYear - yearOfBirth);
}
如果你这样做,你可以 提供setValue()
,但是如果你选择不这样做,你就有一个不可变对象,它有很多好处(关于它通过搜索很容易找到文章)。
如果您正在寻找与精神相似的东西,例如Groovy的运算符重载,list << item
相当于list.add(item)
- Java与此没有任何相似之处。