【发布时间】: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