【问题标题】:java class properties with getter & setter, shouldn't this be common [duplicate]带有getter和setter的java类属性,这不应该是常见的[重复]
【发布时间】:2019-03-31 16:58:21
【问题描述】:

我已经专门用 Java 开发超过 5 年了。

现在,当我开始编写新类或代码时,我总是从定义类的属性开始。所以我每次都需要点击 eclipse generate getter 和 setter 来让我失望。这样代码更简洁,最终更容易理解。

但我喜欢抽象思考和使用 OOP 和泛型。 因此,人们需要使用 Java 原语是有特定原因的,或者我们可以在 Java 中创建一个这样的类,以便始终拥有一个 getter 和 setter,并且仍然可以正常使用 Java 类成员:

public class Property<Type> implements Getter<Type>,Setter<Type>{

protected Type value;

public Property() {

}


@Override
public <T extends Type> void set(T value) {
    this.value = value;
}

@Override
public Type get() {
    return value;
}


public String toString() {
    return value.toString();
}

}

您仍然可以使用修饰符来限制对您定义的变量的访问。您仍将使用与以下相同的变量声明:

     Class test{

     private Property<Number> priv_floatProperty = new Property<Float>();
     protected Property<Number> prot_floatProperty = new Property<Float>();
     public Property<Number> publ_floatProperty = new Property<Float>();

     }

只是想问这个问题,看看其他人如何看待这段代码并以这种方式编写你的类。我真的希望我能得到一些关于这段代码和Java类设计理论的反馈,

【问题讨论】:

  • 不必要的复杂。而且你在get 方法中的演员是不安全的。
  • 请查看Lombok,它部分解决了 getter/setter 的样板代码。
  • 如果你想在使用它的类中设置一些属性,你需要编写一个设置器来调用该属性的设置器......
  • 好吧,例如在上面的示例中,不强制转换为 String 是足够安全的。它会在编译“类型不匹配”时给出该错误。所以它只会将 get 方法转换回 Number 的任何子级。我的意思是这种类型不安全吗?又复杂?我更喜欢这种设计,而不是每次都在我的代码中编写 getter 和 setter。
  • @Pouria Jafari。没关系。无论哪种情况,它都不安全。任何无法检查客户端预期返回类型的参数化方法都是不安全的。

标签: java generics getter-setter


【解决方案1】:

我认为您应该仅在必要时使用泛型。

首先,为了可读性。

其次,您可以快速解决 Java 类型擦除问题 (see)。因此,在比较类(以及使用适当的 .equals/.hashcode 方法)时,您可能会遇到很多问题。我见过一些困难的情况,其中唯一的解决方案是使用不可读、复杂且性能成本高的反射......

按照建议,您可以使用 Lombok 对 getter/setter 进行抽象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2016-12-21
    相关资源
    最近更新 更多