3

Java コンパイラーが変数、パラメーター、メソッド名を一意の ID に置き換えて名前を短縮しない理由がわかりません。

たとえば、与えられたクラス

public class VeryVeryVeryVeryVeryLongClass {

    private int veryVeryVeryVeryVeryLongInt = 3;

    public void veryVeryVeryVeryVeryLongMethod(int veryVeryVeryVeryVeryLongParamName) {
        this.veryVeryVeryVeryVeryLongInt = veryVeryVeryVeryVeryLongParamName;
    }
}

コンパイルされたファイルには、これらすべての非常に長い名前が含まれています。

単純な一意の ID は解析を高速化し、最初の難読化も提供しませんか?

4

4 に答える 4

10

難読化は常に必要であると想定していますが、そうではありません。

  • リフレクションは機能しなくなり、JavaBeans や多くのフレームワークがリフレクションに依存します。
  • スタック トレースが完全に読み取れなくなる
  • コンパイル済みの JAR に対してコーディングしようとすると、次のようなコードになってしまいますString name = p.a1()String name = p.getName()

難読化は、通常、完成したアプリを配信する際の最後の手順であり、ターゲット プラットフォームに厳しいメモリ制約がある場合を除いて、特に頻繁に使用されることはありません。

于 2013-03-28T09:38:24.617 に答える
4

クラスを使用するときは、そのメソッドを名前で参照します。したがって、コンパイラはこれらの名前を保持する必要があります。

いずれにせよ、コンパイラが何かを難読化しようとする理由がわかりません。むしろ、それは正反対のことを目指すべきです: 可能な限り透明性を保つことです。

于 2013-03-28T09:39:09.870 に答える
4

JVM は数値 ID を内部的に使用します。

Java は動的にリンクされているため、クラス ファイルをそのように難読化することはできません。メンバーの名前は一般に読み取り可能である必要があり、そうしないと、他のクラスがコードを使用できなくなります。

于 2013-03-28T09:40:26.243 に答える
1

単純な一意の ID を使用すると、解析が高速化されませんか?

いいえ。おそらく速度が低下するマッピングが追加されます。

また、最初の難読化を提供します

はい。しかし、コンパイラにデフォルトで難読化を行わせたいと思う人はいますか? 私じゃない。

あなたの提案には何のメリットもありません。

于 2013-03-28T22:44:08.110 に答える