2015-12-22 1 views
0

Мне нужно final полей как мое приложение config constants.singleton, static или interface как поля констант?

Я знаю 3 способа, но я не знаю, какой из них является лучшим и и что такое поведение JVM в этом случае (в перспективе вопросов Managment памяти и памяти)

1. с использованием статических полей

public class Constants { 
    public static final String URL = "https://www.google.com"; 
} 
//usage 
Constants.URL 

2. Использование интерфейсов

public interface Constants { 
    String URL = "https://www.google.com"; 
} 
//usage 
Constants.URL 

3. используя одноэлементный шаблон проектирования (нестатический)

public class Constants { 
    public final String URL = "https://www.google.com"; 
} 
//usage 
public static Constants instance = new Constants(); 
Constants.instance.URL; 
+1

Рекомендуемый способ сделать это - включить константы, которые применяются к классу/интерфейсу непосредственно в этом определении класса/интерфейса. Примерами этого являются интерфейсы/классы, такие как «Календарь» и «GridBagConstraints». – ControlAltDel

+0

Разница в потреблении памяти незначительна, вам нужно будет решить другие критерии. – meriton

ответ

2

Ни один из них, использование и тип перечисления. Имейте в виду, что второй вариант действительно нежелателен, потому что является самым важным моментом интерфейсов в том, что вы - , определяющий новый тип.

Кстати, перечисления являются одноточечными (и вы можете использовать их такими) и по умолчанию поточно-безопасными.

Например:

public enum ApplicationStatus { 
    LIVE("live"), 
    MOCKS("mocks"); 

    private final String status; 

    ApplicationStatus(final String status) { 
     this.status = status; 
    } 

    public String value() { return status; } 
} 

И это должно распространяться на самом деле действительно глобальных сообщений/констант/и т.д. для всего приложения.

+1

Зачем нужно переписывать? И почему «определение нового типа» применяется только к интерфейсам? class и enum также вводят новые типы ... – meriton

+1

Также добавлено преимущество перечислений - вы можете добавить к нему некоторое поведение, определяя методы. Это чрезвычайно гибкий и мощный. – Jay

+0

@meriton Классы и перечисления в конечном итоге вводят новые типы, но я прямо сказал: _ самый важный момент: –

Смежные вопросы