`
kennethf6986
  • 浏览: 69241 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaBean的get、set方法引发的讨论

阅读更多
一日,一个兄弟发了一个被大家广泛认为蛋疼的帖子,如下:
{     
    private String code;   //设置成私有变量,有什么鸟用? 难道是为了整个团队配合的时候告诉那些人这个变量不可以动吗? 那是不是一个开发一个项目的时候 这些 修饰符 是毫无意义的?   
  
    public void setCode(String code){     
       this.code=code;     
    }    
}


为什么要写一个方法去给变量赋值?
不能直接吧code变量设置成public 用 obj.code 去赋值吗? 搞不懂,是瞎折腾吗?
引发以下的精彩回帖。话说本帖被评为精华贴,其实是回帖里头有精华。

同学一
这是java的风俗。就好比所有人都在放屁之前脱裤子的社会里,你不脱就是新手。
实际情况确实多数getter/setter都是没有用的。
以OO流派的说法,对象的状态都因该是私有的,对象之间只有message,这就是这个风俗的理论基础。

同学二
1.懂OOP的程序员,会告诉你,这样做为了封装..
2.做过3-5年Java企业项目的人,并被客户需求虐待过的同学会告诉你,这样做为了程序易于修改、维护
3.懂模式设计的合格程序员,会告诉你,这样写能扩展成观察者模式,备忘录模式。。。
4.做过架构设计的牛人,会告诉你,一切为了卸耦..

同学三
很简单,当你有一天需要加入一下条件或者钩子操作的时候你就知道好处啦。

比如现在你写成public的,所有的地方都直接访问,有一天,你需要在这个属性改变的时候做一些观察者的操作,比如发邮件通知,或者其他操作的时候你就杯具啦,你必须在工程中search到底多少地方调用过,并且在每个后面去加上一段sendEmailIfChange(userid,contents)代码,但是如果是封装了,就直接在set里面判断ifChange然后改了。
哪个好,你懂的。

同学四
private 恰恰告诉你,这段代码可以方便的修改,而不是麻烦的修改。
假如你没用settter,gettter.
案列1:系统要求所有对code:String设置值的时候需要记录日志。你原来的代码都是这个样子的:
code = "SomeCode...";
你可能必须得在每处出现此语句的前面加上Log.in(code);有没有想过如果那段代码不是你写的,你没有动那段代码的权限,又或者代码已经通过jar包封成库,发布给客户使用,你咋办?
如果用setter,情形如下:
public void setCode(String code)   
{   
    Log.in(code);   
    this.code=code;       
}   


同学五
封装:任何类成员变量都不应该被外部直接访问(且不说Javabean规范本身就是这样)

同学六
使用 80% 的冗余代码来解决 20% 不一定出现的问题
分享到:
评论

相关推荐

    JavaBean getset

    这个"JavaBean getset"的主题聚焦于JavaBean中的get和set方法。 首先,让我们理解什么是getter和setter方法。在面向对象编程中,getter和setter方法是用于访问和修改对象属性的方法。getter方法用于获取对象的属性...

    用vba编写的生成javabean中get和set方法的工具

    用vba编写的生成javabean中get和set方法的工具。使用时一定要把编号写上。

    lombok jar包 不用get set方法用这个插件不报错

    在标题和描述中提到的,"lombok jar包不用get set方法用这个插件不报错",这意味着使用Lombok可以在不手动编写getter和setter的情况下,依然能够正确地访问和修改对象的属性,而不会出现编译错误。 首先,我们需要...

    get和set生成

    **文件“javabean变量getset生成.xlsx”**: 这个文件可能包含了一个表格,用于批量生成Java Bean类的get和set方法。通常,这种文件会列出类的属性名、属性类型等信息,然后通过某种脚本或工具将这些信息转换成Java...

    javaBean的详细介绍

    2. 方法(Method):JavaBean 的方法是指 JavaBean 中的函数或过程,它可以是 get 或 set 方法,也可以是其他类型的方法。 3. 事件(Events):JavaBean 的事件是指 JavaBean 中的事件处理器,它可以是对外部事件的...

    Java通过PropertyDescriptor反射调用set和get方法

    `PropertyDescriptor`类代表了一个JavaBean的属性,它包含了该属性的`get`和`set`方法的引用。这些方法用于读取和设置对应的属性值。创建`PropertyDescriptor`对象时,需要提供属性的名称以及其对应的`get`和`set`...

    SqlToJavaBean_javabean_根据表结构生成javabean_生成javabean_

    在Java开发中,JavaBean是一种遵循特定规范的Java类,通常用于封装数据并提供相应的getter和setter方法。在数据库操作中,将SQL查询结果映射到Java对象是常见的需求,这时JavaBean的作用就显现出来了。...

    javabean基础知识

    - **使用get/set方法访问其属性**:JavaBean的属性通常遵循JavaBeans规范,即通过get和set方法来访问和修改。 JavaBean提供了一种封装功能、处理逻辑、值、数据库访问等的能力,使得其他开发者可以通过内部的JSP...

    JAVA动态对象装配实现 测试--初步实现bean的set/get功能

    在Java中,Bean通常是指符合JavaBeans规范的Java类,它们是可重用的组件,具有无参数的构造函数、`get`和`set`方法(用于访问属性)以及可以序列化的特性。JavaBeans允许开发者在运行时通过反射机制来创建、配置和...

    JavaBean技术

    4. **公共的get/set方法**:对于私有字段,需要提供公共的getter和setter方法,这些方法通常命名为`getXXX`和`setXXX`,其中`XXX`代表私有字段名称的首字母大写形式。 示例代码如下: ```java public class User ...

    使用JavaBean扩展Forms功能

    这通常涉及到定义一个Java类,遵循JavaBean规范,即包含一个无参数的构造函数,以及私有属性和对应的getter、setter方法。例如,我们创建一个名为`MyBean`的JavaBean,用于处理一些业务逻辑: ```java public class...

    Jsp+JavaBean教程.doc

    创建JavaBean的过程并不复杂,关键是掌握属性(property)及其get/set方法的设计。以下是一个基础JavaBean的实例: ```java import java.io.*; public class FirstJavaBean { private String firstProperty = new...

    Jsp+Javabean教程《共享》

    - **解析**:上述 `FirstJavaBean` 类定义了一个简单的 JavaBean,其中包含了 `firstProperty` 属性,并提供了对应的 `get` 和 `set` 方法。此类可以通过 JSP 的 `<jsp:useBean>` 标签进行实例化,并通过 `<jsp:set...

    轻松学JavaWeb开发之JavaBean基础优秀PPT.pptx

    简单方法是指一个拥有get或者set方法的方法。索引方法是指一个有get/set方法的数组方法。 3. JSP与JavaBean交互的动作指令 在JSP中专门提供了3个动作指令来与JavaBean进行交互,分别为动作指令、<jsp:setProperty>...

    javabean实现用户登录界面.docx

    在 User 类中,我们提供了 getUsername()、setUsername()、getPasswd() 和 setPasswd() 方法,用于获取和设置用户名和密码属性。 5. 使用 JSP 引用 JavaBean 在 login.jsp 中,我们使用 jsp:useBean 标签引用了 ...

    jsp和javabean的实例

    创建javabean并不是一件困难的事情,如果您写过java程序的话那就很容易了,要注意一点的就是在非可视化javabean中,常用>get或者>set这样的成员方法来处理属性>(properties>)。 下面让我们来看一个简单的javabean ...

    javaBean协议

    2. **属性**:JavaBean的核心是其属性,它们通过get和set方法(也称为getter和setter)进行访问和修改。属性通常是私有的,以确保数据封装。例如,一个名为`name`的属性会有对应的`getName()`和`setName(String name...

    JavaBean累加求和.doc

    本实验的目的是了解JavaBean的原理和应用,并掌握JavaBean和JSP结合使用的方法。在实验中,我们将设计实现一个界面,用于输入累加的起始值和截至值,并显示累加结果。 三、实验要求 在实验中,我们需要设计实现一...

    对数据库操作的javabean

    在JavaBean中,我们可以创建一个方法,如`getConnection()`,专门用来获取数据库连接,并封装上述步骤。同样,可以创建其他方法,如`executeSelect(String sql)`用于执行查询,`executeUpdate(String sql)`用于执行...

    javabean 实例

    JavaBean通常具有无参数构造器、私有成员变量以及对应的公共getter和setter方法等特性。下面我们将通过分析提供的代码片段来深入理解JavaBean的相关知识点。 #### Person类 ```java public class Person { ...

Global site tag (gtag.js) - Google Analytics