java - 如何扁平化整个包层次结构?

标签 java package hierarchy flatten

如果我想扁平化所有包层次结构,我该如何继续以及有哪些问题?

请注意,这个问题不是关于我为什么要这样做,而是关于如何这样做。例如,有效的理由包括(但不限于)使 Proguard 成为有用程序的几个原因。

首先,我想保持类名不变,但删除所有层次结构。

所以:

  • com.acme.example.SomeClass 应变为“SomeClass”或
    “a.SomeClass”
  • com.acme.sample.AnotherClass 应该成为
    “AnotherClass”或“a.AnotherClass”

我快速检查了一下,在大约一千个类中,没有两个类具有重复的名称:

find . -iname "*java" | sed 's/.*\///g' | sort | wc -l

和:

find . -iname "*java" | sed 's/.*\///g' | sort | uniq | wc -l

两者都提供相同数量的.java文件(所以我很确定*.java文件中没有任何“重复名称”)。

我正在考虑编写一个 shell 脚本来:

  • 删除(或修改)封装行
  • 删除所有“import com.acme...”行

这行得通吗?

什么因素可能会阻碍此功能的发挥?从公共(public)/ protected /默认/私有(private)可见性的角度来看会发生什么?

我想反射(reflection)会在这里造成严重破坏,但幸运的是我们没有做任何事情。

请注意,我只想在我自己的类上执行此操作:我不想修改外部 API/jar。

最佳答案

您应该看看proguard 。它是一个代码混淆器,有很多选项,包括扁平化包,如果您不想,则不混淆其他内容。

关于java - 如何扁平化整个包层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875182/

相关文章:

php - 单表的邻接树

java - 请求属性中带有嵌套 HashMap 的 jSTL forToken

JavaFX PropertyValueFactory 无法从位于不同包中的类接收属性

python - 如何在 lambda 项目的 python 中正确导入模块

sql - 将邻接列表层次结构展平为所有路径的列表

php array_walk 多维数组

java - 如何通过 JAVA 中的 Math.round 获得我想要的结果?

java - 如何在 Eclipse 中获取调试 View ?

java - Servlet 捕获唯一约束异常

package - UIOP 无法识别本地昵称关键字