Почему модификаторы разрешены для пакета, когда они, кажется, ничего не делают? - PullRequest
9 голосов
/ 24 января 2010

Я могу объявить следующий пакет с модификаторами, но, похоже, он ни на что не влияет:

private public protected static final package com.stackoverflow.mangodrunk

// ...
class Whatever {
    // ...
}  

Итак, мой вопрос: добавляет ли модификатор перед объявлением пакета что-нибудь и почему это будет разрешено компилятором?

Обновление : похоже, проблема с компилятором, поставляемым в комплекте с Eclipse, поскольку другие упоминали, что это ошибка компилятора с использованием Sun JDK.

Ответы [ 2 ]

7 голосов
/ 24 января 2010

Это не так. Какой компилятор вы используете?

$ javac com/stackoverflow/mangodrunk/Whatever.java

com/stackoverflow/mangodrunk/Whatever.java:1: class, interface, or enum expected
private public protected static final package com.stackoverflow.mangodrunk;
                                      ^
1 error
4 голосов
/ 24 января 2010

Согласно JLS, единственное, что может предшествовать package, - это аннотация.

PackageDeclaration:
        Annotationsopt package PackageName ;

Но аннотация выглядит так (полная грамматика опущена для краткости):

NormalAnnotation:
        @ TypeName ( ElementValuePairsopt )

Так что вашему компилятору не следует разрешать стандартные модификаторы доступа.

Источник: http://java.sun.com/docs/books/jls/third_edition/html/packages.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...