Могу ли я создать собственный пакет java. *? - PullRequest
4 голосов
/ 15 апреля 2011

Могу ли я создать свой собственный пакет с тем же именем, что и у предопределенного пакета
в Java, например java.lang?

Если да, каковы будут результаты?Разве это не позволило бы мне получить доступ к защищенным членам этого пакета?

Если нет, что мешает мне сделать это?

Ответы [ 3 ]

7 голосов
/ 15 апреля 2011

Нет - java.lang запрещено. Менеджер безопасности не допускает «пользовательских» классов в пакете java.lang, и нет способа сказать ему, чтобы они их принимали.

Вы правы - собственные классы, объявленные в пространстве имен java.lang, позволят вам использовать protected методы и члены классов в этом пакете, и это определенно нежелательно.


Это прекрасно компилируется - но - попробуйте выполнить его;)

package java.lang;

public class EvilAsEvilCanBe {

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

}
3 голосов
/ 15 апреля 2011

Запрещено любое имя пакета, соответствующее «java. *», И будет выдано исключение безопасности.

2 голосов
/ 15 апреля 2011

Вам мешают две вещи.

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 в Sun / Oracle JVM;)

...