См. образец:
private package com.xm.aws;
import static com.xml.aws.PcgTest.test;
public class PackageTest {
public static void main(String[] args) {
test(args);
}
}
Что сообщает private
о пакете?
См. образец:
private package com.xm.aws;
import static com.xml.aws.PcgTest.test;
public class PackageTest {
public static void main(String[] args) {
test(args);
}
}
Что сообщает private
о пакете?
Не путайте это с модификаторами доступа к частному или другому доступу, которые могут быть добавлены к классам, методам и полям.
Спецификация языка Java четко заявляет:
6.6.1. Определение доступности
- Пакет всегда доступен.
Глядя на это, единственный ответ, который приходит мне на ум, заключается в том, что (некоторые) компиляторы не рассматривают это как ошибку compiletime, но что это совершенно бессмысленно. Невозможно ограничить доступ к классу или пакету таким образом (и каждый пакет всегда доступен).
Другой раздел из java language spec:
7.4.1. Именованные пакеты
Объявление пакета в модуле компиляции указывает имя (§6.2) пакета, к которому принадлежит блок компиляции.
PackageDeclaration:
Аннотации opt package PackageName;
Таким образом, ключевое слово может предшествовать аннотации. Но модификаторы доступа не являются частью объявления пакета. И даже если мы расширяем "Аннотации" , здесь мы не найдем модификаторы доступа.
Еще одна ссылка, согласно JLS 18. Синтаксис единственное, что разрешено предшествовать package
, - это Annotation
.
CompilationUnit:
[[Аннотации] пакет QualifiedIdentifier;]
{ImportDeclaration} {TypeDeclaration}
Выбранный образец кода недействителен в java. Модификатор доступа private
может применяться к членам и методам, включая внутренние классы. Ваш код компилируется в Eclipse, но его отклоняет собственный компилятор Oracle.
Фактически, байт-код, созданный Eclipse для этого java-кода, точно такой же с или без этого ключевого слова private
. Это показывает, что это, вероятно, ошибка Eclipse, где он игнорирует текст перед словом package
во время компиляции.
То, что вы, вероятно, читали или слышали, это фраза "package-private", что означает, что ничего за пределами пакета не может получить доступ к классу или члену. Вы делаете это, не используя модификатор доступа в самом классе. Не используя ключевое слово private
в пакете.
Хотя пакет не является наивысшей степенью инкапсуляции в Java, которая достигается с помощью частного ключевого слова, она по-прежнему занимает второе место и должна инкапсулировать весь а не просто классом.
Короче говоря, модификаторы доступа не входят в объявления пакетов
Отправьте ссылку
Если вы добавите private перед именем пакета, это будет ошибка компилятора
Мне кажется, что это происходит только в затмении. Когда я компилирую код, хотя команда javac через командную строку, я получаю эту ошибку времени компиляции:
ошибка: ожидается класс, интерфейс или enum
Глядя на сообщение здесь, похоже, что eclipse использует свой собственный jdk:
Написание "частного пакета" и "пакета" одинаково. Они идентифицируют один и тот же уровень доступа (dafault one).
Частный модификатор указывает, что член может быть доступен только в пределах своего собственного пакета (как и для защищенного).