Как правильно объявить константы проекта в Java? - PullRequest
6 голосов
/ 16 октября 2011

Это может показаться глупым вопросом для разработчиков Java, однако я новичок в Java, и мой опыт работы с низкого уровня c. Раньше я включал заголовочный файл со всеми константами, которые были важны для моих проектов. (обычно # define's). Сейчас я работаю над большим Java-проектом, и есть несколько констант, которые мне нужно сделать глобальными (они подходят для нескольких классов и используются в различных частях проекта)

Мне трудно решить, куда ее поместить, я должен объявить одну и ту же константу несколько раз, по одному в каждом классе?

Много фреймворка, использует XML-файлы для объявления констант и определений для фреймворка (Hibernate, Log4J и т. Д.). Разумно ли использовать этот вид техники в моем проекте? если так, как это можно сделать легко?

Ответы [ 2 ]

10 голосов
/ 16 октября 2011

Как и во многих вещах, есть много способов сделать это.Одна вещь, которую вы должны не сделать, это объявить их несколько раз - это просто глупо.: P

Все должно быть в классе в Java, поэтому либо:

  1. Выберите «основной» класс (скажем, у меня есть проект под названием «FTPServerApp» - я мог бы поставитьих там)
  2. Создайте класс "Util", который содержит их все

Когда вы выясните, где их разместить, объявите их все так:

public static final [type] [NAME_IN_ALL_CAPS] = [value];

Это

  • сделает их доступными для всего кода вашего проекта, в любом месте (public)
  • только одна копия значения существует во всех экземплярах класса (static)
  • они не могут быть изменены (final).

ALL_CAPS_FOR_CONSTANT_NAMES, разделенный подчеркиванием, является соглашением в Java.

Так, если это было объявлено в классе с именем FTPServerAPP, и у вас была константа с именем SERVICE_PORT, это могло бы быть:

public class FTPServerApp {
  public static final int SERVICE_PORT = 21;

  ...
}

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

  FTPServerApp.SERVICE_PORT
1 голос
/ 16 октября 2011

Взгляните на типы перечисления (http://download.oracle.com/javase/tutorial/java/javaOO/enum.html). Предполагается, что они предоставляют механизм для предоставления констант без определения конкретного класса (или интерфейс с желаемыми константами, как и другой вариант, используемый людьми).

Еще один метод, который я считаю полезным (аналогично приведенному выше примеру FTPServerApp), - это определение контекста для любой подсистемы / компонента / и т. Д., Который содержит не только константы, необходимые для компонентов в этой системе, но может содержать любые укажите, что вы хотите сделать более заметным или не хотите, чтобы отдельные компоненты содержались. Я полагаю, что это соответствует одному из паттернов GoF, но с тех пор, как я посмотрел на эту книгу, я так долго не был уверен (и мне лень сейчас ее искать!)

...