Какова наилучшая практика объявления Java файла с константой?
public interface DeclareConstants
{
String constant = "Test";
}
ИЛИ
public abstract class DeclareConstants
{
public static final String constant = "Test";
}
Какова наилучшая практика объявления Java файла с константой?
public interface DeclareConstants
{
String constant = "Test";
}
ИЛИ
public abstract class DeclareConstants
{
public static final String constant = "Test";
}
Ни один. Используйте final class for Constants
объявить их как public static final
и статически импортировать все константы везде, где это необходимо.
public final class Constants {
private Constants() {
// restrict instantiation
}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
Использование:
import static Constants.PLANCK_CONSTANT;
import static Constants.PI;//import static Constants.*;
public class Calculations {
public double getReducedPlanckConstant() {
return PLANCK_CONSTANT / (2 * PI);
}
}
Смотрите ссылку на wiki: http://en.wikipedia.org/wiki/Constant_interface
- Создайте Class
с полями public static final
.
- И затем вы можете получить доступ к этим полям из любого класса с помощью Class_Name.Field_Name
.
-. Вы можете объявить Class
как final
, так что Class
не может быть расширен (Унаследовано) и изменить....
Оба действительны, но я обычно выбираю интерфейсы. Класс (абстрактный или нет) не требуется, если нет реализаций.
Как совет, старайтесь выбирать местоположение своих констант с умом, они являются частью вашего внешнего контракта. Не помещайте каждую константу в один файл.
Например, если группа констант используется только в одном классе или один метод, поместите их в этот класс, расширенный класс или реализованные интерфейсы. Если вы не позаботитесь, у вас может возникнуть большой беспорядок зависимости.
Иногда перечисление является хорошей альтернативой константам (Java 5), взгляните на: http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html
Вы также можете использовать класс свойств
Здесь файл констант с именем
# this will hold all of the constants
frameWidth = 1600
frameHeight = 900
Вот код, который использует константы
public class SimpleGuiAnimation {
int frameWidth;
int frameHeight;
public SimpleGuiAnimation() {
Properties properties = new Properties();
try {
File file = new File("src/main/resources/dataDirectory/gui_constants.properties");
FileInputStream fileInputStream = new FileInputStream(file);
properties.load(fileInputStream);
}
catch (FileNotFoundException fileNotFoundException) {
System.out.println("Could not find the properties file" + fileNotFoundException);
}
catch (Exception exception) {
System.out.println("Could not load properties file" + exception.toString());
}
this.frameWidth = Integer.parseInt(properties.getProperty("frameWidth"));
this.frameHeight = Integer.parseInt(properties.getProperty("frameHeight"));
}
Этот вопрос старый. Но я хотел бы упомянуть о другом подходе. Использование Enums для объявления постоянных значений. Основываясь на ответе Nandkumar Tekale, Enum можно использовать, как показано ниже:
Enum:
public enum Planck {
REDUCED();
public static final double PLANCK_CONSTANT = 6.62606896e-34;
public static final double PI = 3.14159;
public final double REDUCED_PLANCK_CONSTANT;
Planck() {
this.REDUCED_PLANCK_CONSTANT = PLANCK_CONSTANT / (2 * PI);
}
public double getValue() {
return REDUCED_PLANCK_CONSTANT;
}
}
Класс клиента:
public class PlanckClient {
public static void main(String[] args) {
System.out.println(getReducedPlanckConstant());
// or using Enum itself as below:
System.out.println(Planck.REDUCED.getValue());
}
public static double getReducedPlanckConstant() {
return Planck.PLANCK_CONSTANT / (2 * Planck.PI);
}
}
Ссылка: Использование Enums для объявления постоянных полей предлагается Джошуа Блохом в его книге "Эффективная Java".