- 论坛徽章:
- 0
|
Java classes 组成分析
首先容我以图3的java.util.LinkedList为例,将Java class的定义大卸八块,每一块分别对应图4所示的Reflection API。图5则是“获得class各区块信息”的程序示例及执行结果,它们都取自本文示例程序的对应片段。
package java.util; //(1)
import java.lang.*; //(2)
public class LinkedListE> //(3)(4)(5)
extends AbstractSequentialList //(6)
implements List, Queue,
Cloneable, java.io.Serializable //(7)
{
private static class Entry { … }//(8)
public LinkedList() { … } //(9)
public LinkedList(Collection c) { … }
public E getFirst() { … } //(10)
public E getLast() { … }
private transient Entry header = …; //(11)
private transient int size = 0;
}
图3:将一个Java class 大卸八块,每块相应于一个或一组Reflection APIs(图4)。
Java classes 各成份所对应的Reflection APIs
图3的各个Java class成份,分别对应于图4的Reflection API,其中出现的Package、Method、Constructor、Field等等classes,都定义于java.lang.reflect。
Java class 内部模块(参见图3)
Java class 内部模块说明
相应之Reflection API,多半为Class methods。
返回值类型(return type)
(1) package
class隶属哪个package
getPackage()
Package
(2) import
class导入哪些classes
无直接对应之API。
解决办法见图5-2。
(3) modifier
class(或methods, fields)的属性
int getModifiers()
Modifier.toString(int)
Modifier.isInterface(int)
int
String
bool
(4) class name or interface name
class/interface
名称getName()
String
(5) type parameters
参数化类型的名称
getTypeParameters()
TypeVariable []
(6) base class
base class(只可能一个)
getSuperClass()
Class
(7) implemented interfaces
实现有哪些interfaces
getInterfaces()
Class[]
(8) inner classes
内部classes
getDeclaredClasses()
Class[]
(8') outer class
如果我们观察的class 本身是inner classes,那么相对它就会有个outer class。
getDeclaringClass()
Class
(9) constructors
构造函数getDeclaredConstructors()
不论 public 或private 或其它access level,皆可获得。另有功能近似之取得函数。
Constructor[]
(10) methods
操作函数getDeclaredMethods()
不论 public 或private 或其它access level,皆可获得。另有功能近似之取得函数。
Method[]
(11) fields
字段(成员变量)
getDeclaredFields()不论 public 或private 或其它access level,皆可获得。另有功能近似之取得函数。
Field[]
图4:Java class大卸八块后(如图3),每一块所对应的Reflection API。本表并非
Reflection APIs 的全部。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/29089/showart_375288.html |
|