
首先使用GET SET访问数据是JAVA BEAN的基本规范
虽然在这个事例里面没有区别,但是对外部来讲,只知道你的GET方法返回了一个LIST接口对象,但是没有暴露类内部存在一个LIST对象的信息,
外部并不知道你这个LIST对象是类的私有属性还是 你重新NEW的,又或是你在返回这个LIST时候做了什么 *** 作,
GET的意义在于隐藏类内部的实现细节,只给外部访问统一的接口,同时,如果你类的内部实现变了,比如从一个LIST属性转变成了用COLLECTION或MAP做内部属性再转换成LIST返回数据,只要保留了GET方法对外部是没有任何影响的
软件提供者应该有一个概念,就是一旦一个方法或者变量或者类使用了PUBLIC修饰符那就代表一种承诺,一但你做出了这个承诺就不能再随意修改,因为你的客户很可能使用了这些变量或接口如果直接公开变量那么对你自己来讲这个类的扩展和修改余地就很小了
刚才想了很久,因为你问的太广阔了,内部类访问外部类属性分好多种情况
我感觉直接写了一个例子,截图比较直观一些,出错的地方,
都在关键位置打了标记,也有注释,把有可能出现的错误,我都写出来,也可能没写完
比如局部变量,常量,也是要注意的事情
篇幅有限,我把字体缩小到很多,才把图截全,有注释,把单独窗口打开可以放大,比较醒目一些:
有错的地方,欢迎指正,共同学习
利用反射能
//假设类名为A// 实例化类
A p = new A();
// 获取class
Class c = pgetClass();
// 获取该类所有的字段
Field[] fields = cgetDeclaredFields();
// 遍历赋值
for (int i = 0; i < fieldslength; i++) {
String filedName = fields[i]getName();
// AccessibleTest类中的成员变量为private,故必须进行此 *** 作
fields[i]setAccessible(true);
// 判断类型
Class<> type=fields[i]getType();
//获取字段类型
String typeName=typegetName();
Systemoutprintln(typegetName());
// 对字段进行赋值 第一个参数为对象引用第二个参数为要附的值
//如果为字符串类型
if("javalangString"equals(typeName)){
fields[i]set(p, "1");
}
//如果为日期类型
else if("javautilDate"equals(typeName)){
fields[i]set(p, new Date());
}
else{
fields[i]set(p, 1);
}
}
//楼主我只是简单的写了下。可能还需要判断字段名称以及其他类型什么的。
最后希望楼主多看看java 文档。
package reflection;
import javalangreflectField;
import javalangreflectMethod;
/
该类主要练习使用java的反射机制调用其他类的
private方法和变量;
/
public class MethodTest
{
public static void main(String[] args) throws Exception
{
Class<> classType = Peopleclass;
People p1 =(People) classTypenewInstance();
// 获取指定的方法,调用People类的私有方法;
Method method = classTypegetDeclaredMethod("sayHello",
new Class[] { Stringclass });
methodsetAccessible(true);//压制java的访问修饰符;
methodinvoke(p1, new Object[]{"Mr zhou"});
//获取People类的私有属性;
Field field = classTypegetDeclaredField("age");
fieldsetAccessible(true);
fieldset(p1, 12);
Systemoutprintln(fieldget(p1));
}
}
class People
{
private int age;
private String name;
public int getAge()
{
return age;
}
public void setAge(int age)
{
thisage = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
thisname = name;
}
private void sayHello(String str)
{
Systemoutprintln("Hello: " + str);
}
}
java中子类本来就可以通过继承公共方法访问父类的私有变量啊,
就算不是父子关系,一个类也可以通过另一个类的公共方法访问它的私有变量了。
子类是访问了父类的方法,记住是方法而不是属性
父类的方法 *** 作了私有属性,这跟子类没有任何关系
abstract
class
Figure
{
private
String
shape;
public
Figure(String
shape)
{
thisshape=shape;
}
//这里添加一个get方法,便于子类访问父类的属性
public
String
getShape()
{
return
shape;
}
public
abstract
String
setShape();
}
public
class
A
extends
Figure
{
public
A(String
shape)
{
super(shape);
}
//通过父类的get访问器访问其私有属性
public
String
setShape()
{
return
supergetShape();
}
}
在main方法里面测试:
A
a=new
A("aa");
Systemoutprintln(asetShape());
以上就是关于java geter方法是否该直接返回私有属性全部的内容,包括:java geter方法是否该直接返回私有属性、Java内部类是如何获取外部类的private属性、Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)