Java class name same as the nested package name

后端 未结 5 856
悲哀的现实
悲哀的现实 2020-12-19 15:40

In my Java application, I use a third-party library.

However, I found something strange, there are some nested packages, and some classes whose name may be the same

5条回答
  •  难免孤独
    2020-12-19 15:46

    This is a common issue when decompiling jars. The Compiler will get confused when there is a class and a subpackage with the same name. If you don't find a compiler with the option to append a prefix regarding the type(package, class variable) you have to refactor the source files. You can do that with regex by for example renaming every package declaration and import from import A.B.C to something like import pkgA.pkgB.C. Of course you can't do that for the external packages from the sdk or other libraries but most of the time the used obfuscator renames them in the same way so for renaming to letters from A-Z you could use something like:

    RegexFindAll("import\s+(?:[A-Z]\s*.\s*)*([A-Z])\s*.\s*(?:[A-Z]\s*.\s*)*[A-Z]\s*;")

    RegexFindAll("package\s+(?:([A-Z])\s*.\s*)*([A-Z])\s*;")

    And from there on you can rename every package. If your IDE doesn't offer such functionality you can also rely on the terminal with following commands.

    To find all the files by name recursively(extendable with filename filter)

    find -follow from https://stackoverflow.com/a/105249/4560817

    To iterate over the found filenames

    sudo find . -name *.mp3 |
    while read filename
    do
        echo "$filename"    # ... or any other command using $filename
    done
    

    from https://stackoverflow.com/a/9391044/4560817

    To replace text inside a file with regex

    sed -i 's/original/new/g' file.txt from https://askubuntu.com/a/20416

提交回复
热议问题