![58ea314b02f3c36994ae8c50f8812848.png](https://i-blog.csdnimg.cn/blog_migrate/d8e339237c867bd850adf61da632d185.png)
前言
现在的资源调用都是用hashcode,但是写了很多的magic text,这样很“脏”。android中使用了R文件来定义资源的散列值,通过加一层R,让magic text消失,android是用名为aapt的工具来实现的。我就写一个名为RMake的类来完成。
本篇主要说明散列思想,及应用于字符串资源的编译索引。
为什么要用散列码?R文件的作用是什么?
其实学过《离散数学》就不会有这类问题了。这跟1+1为什么=2一样。
为什么用散列码?
答:《离散数学》
R文件的作用是什么?
R文件是一个静态类,它有静态的内部类,一般为id/string/style/layout等。这是一种编译技术的产物,用代码生成代码。
在本例中是“用xml代码生成java代码”。
这这样就能引用java代码来间接引用xml的资源。
映射的函数就是离散数学中的散列函数。本例中直接使用java.lang.String.hashCode()。
/**
算法在JDK源码的注释文档中写明,这里就不解读了,纯数学表达式。
实现R文件的编译
没那么难,先写一个粗糙的输出
@Override
输入:XML文件内容
<?xml version="1.0" encoding="UTF-8"?>
输出:控制台文本
file, 文件, 3143036
code, 代码, 3059181
edit, 编辑, 3108362
help, 帮助, 3198785
...
格式化为R类的源代码
@Override
输出:
public
有关R辅助用例
检验name的合法,目前我只验证了不能为java关键字。
package
更多的验证,后续再按优先级添加,现在不关心。
看一下添加验证的输出
...
![779db6aa26193a60c9bfc24d5cbe5ed3.png](https://i-blog.csdnimg.cn/blog_migrate/2553e7d0ee4f600e4081db3780ea0933.jpeg)
复制到R文件中(是的,我没有写fileAutoWrite的代码,所以现在还是手工复制)
package
同步的,要调整XML的资源加载,容器还是HashMap,但泛型类型为<Integer, String>
package
使用R文件
![d70c3fa84e1380b9ef587bcc93f84bb0.png](https://i-blog.csdnimg.cn/blog_migrate/0e63a07e7a7dfcd047f23993be23d21e.jpeg)
与其说是编程的快乐,不如说是数字的魅力。
数学家天下无敌!
我爱数学~
我用编程来应用数学~快乐~
以上~