該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
Java反射機制提供了一種強大的應用程序接口來幫助我們在運行時檢測和執行對象上的操作。該機制允許程序員審視一個未知對象,并且獲得它的屬性,例如對象上的方法,JavaBean的屬性以及繼承關系等。
Java中有兩種類型的值,一種是類類型,它把對象的屬性定義在一個類中。類類型是面向對象結構的基本組成部分。第二種類型的值是基本數據類型。反射類型通常用于類類型,但是,其實它也可以很方便應用到Java的基本類型上。
Java中的基本類型繼承自基于C的語法,其中包括boolean、byte、short、int、long、float、double、char等類型。
每一個基本類型都與一個java類相關聯。這些類封裝在java.lang.package中,這個package默認導入所有的java源代碼文件。
在java.lang包的基本數據類型包裝類中,不是像定義對象那樣用類(class)而是用一些特殊的常量來表示基本數據的類型(type).例如,是常量Interger.TYPE而不是類Integer表示int類型,是Byte.TYPE常量表示了byte類型.這種方式使得為一個未知的JavaBean創建通用的組件成為可能.
下面是一個例子片斷,其作用是根據一個傳來的HttpServletRequest中設置JavaBean中的值。
//?thrown
Exceptions?are?left?out?for?ease?of?reading...
Object?bean?=?....
BeanInfo?bi?=?Introspector.getBeanInfo(bean.getClass(?));
PropertyDescriptor[?]?pds?=?bi.getPropertyDescriptors(?);
for(int?i=0;?i?String?name?=?pds[i].getName(?);
String?value?=?request.getParameter(name);
if(value?!=?null)?{
Method?method?=?pds[i].getWriteMethod(
);
value?=?convert(value,
method.getParameterType(?)[0]);
method.invoke(bean,?new?Object[
]?{?value?}?);
}
}
Convert方法中缺少的代碼定義如下:
public?Object
convert(Object?value,?Class?type)?{
String?name?=?type.getName(?);
if(?"java.lang.String.equals(name)?)?{
return?value.toString();
}?else
if(?"java.lang.Long".equals(name)?||?(type?==
Long.TYPE)?)?{
return?convertToLong(value);
}?else
if(?"java.lang.Integer".equals(name)?||?(type
==?Integer.TYPE)?)?{
return?convertToInteger(value);
}?else
.....
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态