一个java对象有哪些属性的属性是私有的,而且没有提供public的get和set方法,可以用反射的方式将其转成json吗?


如果仅仅是图中的例子那么你說的这两种方式是没什么区别的。外部调用的结果都可以对属性进行读取与修改

但是这个例子只是展示了一个常规的私有属性与 get/set 方法的使用模式,仅仅从这个例子中看不出来这个模式有什么好处实际上,公共属性与私有属性的使用还是有很大区别的:

  • 如果一个属性是 public,那么外部可以直接对这个属性进行读取与修改;
  • 如果一个属性是 private那么外部不可以直接对这个属性进行读取与修改,而是通过这个类提供的 get、set 方法去访问

也就是说,前者把控制权交给别人而后者的控制权还在自己手中。我举几个简单的例子:

  • 比如说一个只读属性可鉯提供 get 方法给外界调用读取,但是不允许修改那么这时候可以不提供 set 方法,或者在 set 方法中抛出异常;
  • 比如我的数据格式与别人使用的格式不同那么我可以在 get 与 set 方法中,加上进行格式转换的代码;
  • 比如我的数据可以被读取与修改但是修改时候必须经过我的验证,那么我嘚 set 方法中会添加数据验证的代码

也就是说,get、set 方法的主要作用是控制外界对私有属性的访问这一点,将属性声明为 public 是做不到的

再举個大白话的例子。比如我有一本书如果这本书声明为 public,那么书的控制权在外人手里外人可以直接把书拿走去读,还可以在书上乱写乱畫但是如果声明为 private,书的控制权在我自己手里别人想要看书,必须先经过我的允许(get 方法控制)而且绝对不能在书上乱写乱花(set 方法控制)。   

你说的是这个问题吧. 是这样的.private 是不让别人用, public 是让别人用, 但是有一种需求是让有的人用而让另外一些人不能用. 这时private/public的功能就出现短板了. 这时就有了set/get方法的用武之地了. 我们可以在set/get方法是设置,

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

最近有此需求:拿到name,需要执行setName()方法这里记录一下,可以当做工具类直接使用:

//获取某个属性的类型 * 根据属性获取get方法 * 根据属性,拿到set方法并把值set到对象中 * 通过class类型获取获取对应类型的值

1.统一出入口这样我只需要规定哪些属性你可以操作(get或者set,而且是可选的有些属性只能set,有些只能get)有些属性不开放,set和get都不给你用也就是属性不对外开放。

2.外蔀类对该类的属性调用有比较好的适应性保证代码有比较好的完整性。举个简单的例子我定义了一个类,这个类中有个time属性原来单位是分,现在我想改成秒只需要更改get中的方法就可以,外部调用这个类的其他类就不需要更改了如果你直接采用对象.属性类获取的话,在外部只要有调用这个属性的地方都要改这样对原代码破坏就比较大。

我要回帖

更多关于 java对象有哪些属性 的文章

 

随机推荐