缩短get / setValue()

时间:2017-04-24 10:32:16

标签: java

我知道java不支持运算符重载,并且我可以缩短方法名称。 但是有没有其他方法来缩短一些表达式,如:

MyClass obj = new MyClass();
obj.setValue(2);
int a = obj.getValue();

并接近这个:

obj = 2;
int a = obj;

5 个答案:

答案 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)

更短不是更好!获得正确的逻辑并使用足够长的名称以使其有用。别担心;你不可能指责更长的名字。

liveDataobj这样的名字简直太糟糕了。他们没有说明构造的域角色。名称需要有意义。他们应该反映角色,而不是实施。

人们必须保持你的废话。不要混淆你的代码。

答案 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与此没有任何相似之处。