Classworking工具箱: 分析泛型数据结构 - 编程入门网
ot;Lsun/")) {
refs.add(ftype);
dones.add(ftype);
}
}
}
}
public static void main(String[] args) {
BinaryClassLoader loader = new BinaryClassLoader();
loader.addPaths(System.getProperty("java.class.path"));
loader.addPaths(System.getProperty("sun.boot.class.path"));
TypeDirectory tdir = new TypeDirectory(loader);
TypeDescription desc =
tdir.getTypeInstance("Lcom/sosnoski/generics/PathDirectory;");
printDescription(desc);
}
}
com.sosnoski.generics.PathDirectory fields:
m_pathPairs of type
com.sosnoski.generics.PairCollection<java.lang.String,com.sosnoski.generics.DirInfo>
com.sosnoski.generics.PairCollection<java.lang.String,com.sosnoski.generics.DirInfo>
fields:
m_tValues of type java.util.ArrayList<java.lang.String>
m_uValues of type java.util.ArrayList<com.sosnoski.generics.DirInfo>
java.util.ArrayList<java.lang.String> fields:
serialVersionUID of type long
elementData of type java.lang.String[]
size of type int
java.util.ArrayList<com.sosnoski.generics.DirInfo> fields:
serialVersionUID of type long
elementData of type com.sosnoski.generics.DirInfo[]
size of type int
com.sosnoski.generics.DirInfo fields:
m_files of type java.util.List<com.sosnoski.generics.FileInfo>
m_directories of type java.util.List<com.sosnoski.generics.DirInfo>
m_lastModify of type java.util.Date
java.util.Date fields:
gcal of type sun.util.calendar.BaseCalendar
jcal of type sun.util.calendar.BaseCalendar
fastTime of type long
cdate of type sun.util.calendar.BaseCalendar$Date
defaultCenturyStart of type int
serialVersionUID of type long
wtb of type java.lang.String[]
ttb of type int[]
在清单 6 底部的输出中(为了格式化稍微重新调整了结构),可以看到类型替换代码的作用。类型替 换的第一个实例在输出的第 4 和第 5 行,里面指定了 ArrayList 实例中值的类型。接下来的 ArrayList<String> 分析显示出它有一个 String[] 字段。这个输出也显示了数据结构分析的局限 性:一旦遇到 DirInfo 类中的 List 字段,就没法进一步分解了,因为 java.util.List 是接口而不是 实际的类 —— 而且只有接口的实现才有字段。当然,对本文提供的代码做些修改,也可以把同样的分析 像用于字段一样用于方法,而且这种分析方法也能包含接口。 泛型结束语 到现在,已经看到了如何用 ASM 框架实现泛型数据结构分析,还有一个快速的示例,表现了这类分析 的可能性和局限性。还有一些比较好的应用,通过在工具中整合泛型,在 Java 类之间和一些外部形式之 间进行转换,从而提供详细的数据视图。例如,我正计划在我的 JiBX 数据绑定框架的新版本绑定生成器 中,利用泛型提供的信息,在不需要用户的额外输入的情况下,填充结构的更多细节。 在三篇关于泛型的文章之后,我要换一个主题了!接下来的类处理工具包 系列中,我将介绍一个处理 Java 5 标注的工具。以前,我曾经介绍过在使用标注作为配 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |