2011-04-15 3 views
4

Javaで
の定義済みパッケージと同じ名前のパッケージを作成することはできますか?java.langなどですか?カスタムjava。*パッケージを作成できますか?

もしそうなら、結果はどうなるでしょうか?そのパッケージののメンバーにアクセスできますか?

もしそうでなければ、私はそうしないのですか?

答えて

7

いいえ - java.langは禁止されています。セキュリティ管理者はjava.langパッケージ内の "カスタム"クラスを許可しておらず、受け入れるよう指示する方法はありません。

あなたはjava.lang名前空間で宣言された自分自身のクラスを使って、protectedメソッドとそのクラスのメンバーを使用できますが、これは間違いありません。


これは罰金コンパイル - しかし - それを実行してみてください。)

package java.lang; 

public class EvilAsEvilCanBe { 

    public static void main(String[] args) { 
     System.out.println("hehe"); 
    } 

} 
+2

私はサンプルパッケージとしてjava.langを提供しましたか?あなたはセキュリティ管理者がそれを防ぐと言いました。しかし、これは、例えばセキュリティ管理者や何らかの種類のライセンスを持っていないサードパーティ製のパッケージを使って行うことができるということですか? –

+1

@AB Najjar - あなたのクラスを他のツールと同じ名前空間(=パッケージ)に宣言することができます。そして、それらのパッケージのprivateクラス、メソッド、およびフィールドを使用することができます。そして、彼らはあなたのものを使うことができます。 **しかし**:これは技術的に可能で、通常は悪い習慣と考えてください。他のlibsを協調的な方法で使用してください。通常、人々は*パッケージ*をプライベートなものとして宣言します。 –

+0

それは私にそのパッケージの保護されたメンバーへのアクセスを許可しますか?それは厄介でも間違っているのではないですか? –

2

はあなたを防止二つのものがあります。

1)使用許諾契約。注:rt.jarのクラスを上書きする目的でこのオプションを使用するアプリケーションは、Java 2 Runtime Environmentのバイナリコードライセンスに反するため、展開しないでください。 http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html

2)-Xbootclasspath:bootclasspathを使用するか、lib/endorsedディレクトリを追加する必要があります。

いくつかのクラスは、JVMの内部最適化のために簡単には変更されません。 )Object to Sun/OracleのJVMに複数のメソッドを追加することはできません;

3

"java。*"に一致するパッケージ名は禁止され、セキュリティ例外がスローされます。