当有许多属性时,不使用Java中的set和get方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了当有许多属性时,不使用Java中的set和get方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1566字,纯文字阅读大概需要3分钟。
内容图文
所以我一直在学习OOP.我目前正在尝试使用HP,Mana,智能,力量,敏捷,装甲等创建简单的“英雄配置文件”.正如您所看到的,我想要添加到Hero对象中的属性很多.但是这些属性是私有的而不是公开的(因为我被告知最好将这些属性声明为私有),当我私下声明它们时,我必须为每个属性创建set和get方法.它消耗了很多时间,我觉得它不实用.
有更实用的方法吗?编码员是否真的键入了这些get和set方法,即使它们有十几种?我想做的就是用这些属性创建两个Hero Profiles,然后模拟两者之间的1v1战斗.
解决方法:
无论谁告诉你,对象的个别属性应该是私有的绝对正确!
OOP的基本原则之一是Encapsulation.简而言之,它意味着应该隐藏对象的内部结构(“字段”).这是OOP最重要的方面,OOP的大部分优势都来自于此.
现在,访问器方法(setter和getter)违反封装,就像公开它们一样,因为你不再隐藏内部结构.它不仅仅是保护内部领域,而是隐藏它们.
不幸的是,访问器方法是Java中常见的习惯用法(也是C#),但如果你认真学习OOP,你应该不惜一切代价避免使用它们!之后,当你有更多的经验时,你可能会在少数情况下做出例外,但我会敦促你暂时避免它们.避免使用Project Lombok并避免IDE功能自动生成内容.
Here是Allen Holub关于这个主题的精彩文章.
回到你的实际问题:是的,你声明你的字段是私有的,但你根本没有为它们定义setter / getters.我们所做的是考虑对象应具有的职责/特征/功能/逻辑.
因此,不要考虑统计数据,而要考虑使用这些统计数据的内容.面向对象的Hero可能看起来像这样:
public final class Hero {
private int hp;
private int strength;
private int agility;
private int armor;
...
public void dealDamageTo(Hero other) {
other.takeDamage(stength);
}
public void takeDamage(int damage) {
hp = hp - Math.max(0, damage-armor);
}
...
}
当然,这只是一个例子,但你可能会明白这一点.如果您的设计是正确的,根本不需要发布内部字段.
内容总结
以上是互联网集市为您收集整理的当有许多属性时,不使用Java中的set和get方法全部内容,希望文章能够帮你解决当有许多属性时,不使用Java中的set和get方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。