Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有很多能手&;塞特是个好主意吗?_Java_Android_Open Source_Getter Setter - Fatal编程技术网

Java 有很多能手&;塞特是个好主意吗?

Java 有很多能手&;塞特是个好主意吗?,java,android,open-source,getter-setter,Java,Android,Open Source,Getter Setter,在编写打算开放源代码的应用程序(用java)时,使用大量getter和setter并将变量私有化通常是一个好主意吗?更具体地说,如果这是一个android应用程序,上述问题的答案是否仍然有效 编辑:如果你们能给我一个具体的理由,为什么它更好,那将是非常棒的 如果希望从外部访问所有私有变量,则为是 假设您有一些不打算从外部使用的标志,那么这些标志就不需要getter/setter 另请参见 这样说吧,您不需要使用getter/setter,您计划将您的属性设置为非私有属性。这种方法似乎没有任何

在编写打算开放源代码的应用程序(用java)时,使用大量getter和setter并将变量私有化通常是一个好主意吗?更具体地说,如果这是一个android应用程序,上述问题的答案是否仍然有效


编辑:如果你们能给我一个具体的理由,为什么它更好,那将是非常棒的

如果希望从外部访问所有私有变量,则为是

假设您有一些不打算从外部使用的标志,那么这些标志就不需要getter/setter

另请参见


这样说吧,您不需要使用getter/setter,您计划将您的属性设置为非私有属性。这种方法似乎没有任何问题。但你必须问自己几个问题

  • 您是否有任何财产的价值应该在分配前接受一些检查?(需要设置器)
  • 您是否有任何不想公开的可变属性?(需要吸气剂)
现在,如果您认为您的几个属性需要getter/setter,但不是全部。然后我会说,为了保持一致性,为所有这些方法创建getter/setter

进一步见

  • 项目13:尽量减少类和成员的可访问性
  • 第14项:在公共类中,使用访问器方法,而不是公共字段
  • 项目15:尽量减少可变性
  • 第38项:检查参数的有效性
  • 项目56:遵守公认的命名惯例

如果您正在讨论ANDROID中的getter和setter,请查看ANDROID文档说明:-


在Android上,这是个坏主意。虚拟方法调用的开销比实例字段查找要大得多。遵循常见的面向对象编程实践并在公共接口中使用getter和setter是合理的,但在类中,您应该始终直接访问字段。

始终适用。尽可能地保护您的属性。为什么它总是有效?比亚恩·斯特劳斯特鲁普(Bjarne Stroustrup)认为数据专用是更好的选择,而不是受保护的。我通常会发现可能的重复对象更容易处理--例如,不要只在所有对象中添加一个getter/setter,而是想想需要暴露什么,以及如何做到干净。(因此,“很多getter和setter”会触发我的代码气味标志。)我得到了您声明的第二部分。我的问题是使用getter/setter是否比直接访问变量更好,尤其是在值检查不重要的情况下。是的。。始终使用getter/setter它有自己的优势,今天没有必要假设明天会出现。您仍然可以直接访问变量,而不必使用getter和setter。假设明天您需要对其值添加一些检查。然后它将******提高代码的性能,因为在某一天,您可能需要对这些setter和getter进行一些验证逻辑。例如,如果您想存储出生日期,您可以在setter中检查此条件,使其不应在将来出现。@BeeOnRope:确实,谢谢您的更正。