как реализовать класс Java, чтобы он содержал константы для других классов в других файлах - PullRequest
1 голос
/ 09 декабря 2011

Каков наилучший способ внедрения системы для установления констант в рамках всей программы? У меня есть программа, которая охватывает несколько файлов, и я хочу иметь класс, который хранит константы, чтобы они были доступны для всех других файлов. Я пробовал что-то вроде этого:

в Constants.java

public final class Constants{
    private Constants(){}
    public static final String EX = "mas";
}

и test.java

import Constants.*;
public class test{
    public static void main( String[]args){
            System.out.println( EX );
    }
}

но я получаю следующую ошибку

test.java:1: error: cannot find symbol
import static Constants.*;
              ^
  symbol: class Constants

Constants.java и test.java находятся в одном каталоге.

Ответы [ 5 ]

5 голосов
/ 09 декабря 2011

Нельзя импортировать из пакета по умолчанию. См. Спецификация языка Java

Поместите класс в пакет.

1 голос
/ 09 декабря 2011

Вы не можете импортировать классы без пакета (также называемого пакетом по умолчанию)

0 голосов
/ 09 декабря 2011

Любая общедоступная статическая конечная переменная будет доступна где угодно без создания экземпляра объекта.В вашем случае вы можете получить доступ к переменной EX с помощью:

 Constants.EX;

В общем, при хорошем объектно-ориентированном проектировании константы, которые вы включаете в класс, должны быть специфичными для этого типа объекта.Например, если у вас есть объект Window, его константой может быть «aspectRatio» или «height», но было бы неуместно иметь «nameOfUser» в классе Window в качестве константы.Поэтому иногда создание «универсального» класса констант неизбежно приводит к тому, что вы теряете из виду, какие переменные действительно принадлежат разным классам при следовании объектно-ориентированным идеалам.

0 голосов
/ 09 декабря 2011

При импорте вам потребуется ввести ссылку на Constants с полным именем пакета.

Например, если Constants и test находятся в пакете "com.mystuff", вам необходимо выполнить импорт следующим образом:

import static com.mystuff.Constants.*;

В качестве альтернативы, поскольку ваши классы находятся в одном пакете, вам вообще не нужен импорт - просто квалифицируйте EX с классом Constants, например Constants.EX вместо просто EX.

0 голосов
/ 09 декабря 2011

Если эти два класса находятся в одном пакете, вам не нужно импортировать.

  1. Удалите оператор импорта для класса констант
  2. В вашем тестовом классе используйте следующеестрока: Constants.EX для получения значения EX.
...