Импорт пакета и как использовать все классы в Java-файле

Я создаю пакет com.XXXXВнутри этого я объявляю много классов в Java-файле (по умолчанию - не публично)

пусть будет как:

class A{}
class B{}
class C{}

Я импортирую com.XXXX в другой файл

Я не могу использовать эти классы, которые находятся внутри пакета, так как они не являются публичными.

Поэтому я подталкиваю к состоянию создания отдельных файлов для каждого класса.

Каждый класс - это просто небольшая структура, в которой нет никакой дополнительной функции. Поэтому я подумал о том, чтобы хранить их в одном файле. Поэтому я не могу объявить классы общедоступными

Есть ли способ использовать все классы, не разбивая их на отдельные файлы?

3 ответа

Решение

Если (каким-то образом) имеет смысл сгруппировать эти классы вместе, то вы можете поместить их в класс-оболочку как статические внутренние классы, например:

package com.somewhere;

public class Utils {
    public static class DateUtils {
        public static Date today() {
            return new Date();
        }
    }

    public static class FilenameUtils {
        public static String stripExtension(String path) {
            return path.substring(0, path.lastIndexOf("."));
        }
    }
}

Затем вы сможете импортировать их в другом месте:

package com.elsewhere;

import com.somewhere.Utils;

public class Task {
    Date today = Utils.DateUtils.today();
}

Это связано с тем, что по умолчанию модификатор доступа к Java является закрытым пакетом. Когда вы создаете классы без модификатора доступа, они становятся доступными только внутри пакета.

Если вы не хотите выставлять его вне фляги, переименуйте ваш пакет в com.internal.XXXX. Когда вы помещаете ключевое слово internal, этот пакет не будет доступен вне jar, даже если вы думаете, что ваши классы внутри пакета будут общедоступными.

Если вы хотите иметь более одного класса в одном файле, вы можете использовать вложенные классы.

Пожалуйста, ознакомьтесь с: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Пример:

class OuterClass {
    ...
    class NestedClass {
        ...
    }
}

Затем вы можете ссылаться на OuterClass.NestedClass из другого пакета.

Другие вопросы по тегам