2017-02-24 5 views
3

はのは、私自身のプロジェクトで、私はcom.3rdparty.fooという名前のサードパーティ製のパッケージを使用するとしましょう、とそのパッケージでパッケージのプライベートフィールドを持つクラスがあります:私はパッケージプライベートフィールドが「ARENことを実現今自分のクラスをサードパーティのパッケージに入れることは可能ですか?

package com.3rdparty.foo; 

public class Bar { 
    public void someMethod() { ... } 

    int ppField; 
} 

そのパッケージの外でアクセスされるはずです。しかし、好奇心から、私自身のクラスを作成し、例えば、そのサードパーティ製のパッケージにそれを属性、パッケージのプライベートフィールドの保護を回避するためにすることが技術的に可能である:

// MyOwnClass.java 

package com.3rdparty.foo; 
import com.3rdparty.foo.Bar; 

public class MyOwnClass { 
    public int hackPPField (Bar b) { return b.ppField; } 
} 

私は、これは技術的に不可能であることを期待。しかし、実際そうであれば、パッケージシールの正確なメカニズムを知りたいので、サードパーティのパッケージを任意に拡張することができません。

答えて

1

はい、通常の場合は完全に可能です。私が間違っていないとクラスのクラスとクラス内の他のクラスを同じクラスローダーでロードする必要があります。クラスを特定のパッケージに入れることはできません(例えばjava.lang;実際にはjava.パッケージ)しかし、一般的なケースでは、そのクラスは他のクラスと区別されません。com.3rdparty.foo

関連する問題