java带参数的类setter_关于泛型:带有getter和setter的java类属性,这不应该是常见的...

本问题已经有最佳答案,请猛点这里访问。

我已经用Java开发了5年多了。

现在,当我开始编写新的类或代码时,我首先要定义类的属性。因此,每次我的失望时,我都需要点击eclipse生成getter和setter。这是更清晰的代码,最终更容易理解。

但我喜欢抽象和使用OOP和泛型。

因此,人们需要使用Java原语的特定原因或者我们可以在Java中创建这样的类以始终具有getter和setter,并且仍然在Java类成员的正常使用范围内:

public class Property implements Getter,Setter{

protected Type value;

public Property() {

}

@Override

public void set(T value) {

this.value = value;

}

@Override

public Type get() {

return value;

}

public String toString() {

return value.toString();

}

}

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

Class test{

private Property priv_floatProperty = new Property();

protected Property prot_floatProperty = new Property();

public Property publ_floatProperty = new Property();

}

只是想问这个问题,看看其他人对这段代码的看法以及用这种方式编写课程。我真的希望能得到关于这段代码和Java中类设计理论的一些反馈,

不必要的复杂。而你在get方法中的演员阵容并不安全。

请查看Lombok,它部分地解决了getter / setter的样板代码。

如果你想在使用它的类中设置一些属性,你需要编写一个setter来调用该属性的setter ....

那么它的安全性足以在上面的例子中不转换为String。它会在编译"Type missmatch"时给出错误。所以它只会将get方法强制转换回Number的任何子节点。我的意思是不安全吗?又复杂吗?我更喜欢这个设计,然后每次都要在我的代码中编写getter和setter。

@CarlosHeuberger,对不起,你可以使用了。符号是否可访问权限?像anyclass.myproperty.set()

@Pouria Jafari你认为这样做会发生什么:Integer t = priv_floatProperty.get();

@Pouria Jafari。没关系。在任何一种情况下都不安全。任何无法检查客户端预期返回类型的参数化方法都不安全。

我同意它引入了太多的复杂性。如果这是一种常见模式,那么您实际上会在常见的存储库中看到它

@tsolakp我编辑了这门课。它将返回声明的类型,但您可以将其设置为该类型的任何扩展类。还不好吗?让我自我清理一下,如果你不得不写一个超过1000种属性的类。您会选择哪种解决方案?

按照你提出的方式进行,你有一个List字段时你会做什么,并且你想确保getter将始终返回列表的副本,以及一个确保消费者无法访问底层的add()方法清单?

@Pouria Jafari。 get方法看起来不错。

@cleberz您可以在需要时覆盖匿名类函数中的get方法。或者为特定变量创建一个add函数。你可以在访问变量时使用它吗?

这里更大的问题是你不应该为所有对象属性公开访问器,特别是setter。告诉,不要问:如果你只把你的类视为属性包,那么你就是在进行结构化编程,而不是面向对象的编程。

确定你可以使用``anyclass.myproperty.set , but why not use anyclass.myproperty.value = ...` - `myproperty没有添加任何内容,仅使用一个对象来保存另一个对象对我来说有点奇怪,为什么没有另一个对象来持有持有该对象的对象?它确定,IMO,如果它有一些额外的功能(或语义原因),但只是拥有它?

不变性怎么样?你有某种Property类可以防止有人调用set()吗?

@CarlosHeuberger感谢您的意见。它具有的功能之一是setter和getter不再是包含类的一部分。首先访问该属性,然后使用set like anyclass.property.set()。请阅读我对cleberz的下一个答案,了解其优势。

@cleberz实际上我的想法是让getter和setter接口由Property类的子实现。完整的apprauch将有一个例如astract属性类,并有子类如immutuableproperty或NotNullProperty ..我将看看Java中的Optional实现,看看他们是如何做到的。我还试图创建一个例子,例如在类中使用属??性"time"来显示优点。将在今天晚些时候发布示例代码。

我认为你应该只在必要时使用泛型。

首先,为了便于阅读。

其次,您可以快速解决Java类型擦除问题(请参阅参考资料)。 因此,在比较类(以及使用适当的.equals / .hashcode方法)时,您可能会遇到很多问题。 我看到一些困难的案例,唯一的解决方案是使用不可读,复杂和性能成本的反映......

如建议的那样,您可以使用Lombok来绘制getter / setter的抽象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值