В программировании и не только в нем есть старое правило: если что-то выглядит красиво, то, скорее всего, так и надо делать.
Такой подход не выглядит хорошим, с моей точки зрения.
Первое:
Не объявляйте константы в интерфейсах. Это нарушает подход инкапсуляции. Ознакомьтесь с этой статьей: http://en.wikipedia.org/wiki/Constant_interface
Второе:
Используйте префикс для имен ваших свойств, которые являются особыми, например: key_
И когда вы загружаете свой файл свойств, перебирайте ключи и извлекайте ключи с именем, начинающимся с key_
, и используйте значения этих ключей, как вы планировали использовать эти константы в своем вопросе.
ОБНОВЛЕНИЕ
Предположим, мы создаем огромный файл свойств в процессе компиляции, используя наш скрипт Apache Ant.
Например, пусть файл свойств (myapp.properties
) выглядит так:
key_A = Apple
key_B = Banana
key_C = Cherry
anotherPropertyKey1 = blablabla1
anotherPropertyKey2 = blablabla2
имена наших специальных свойств, которые мы хотим обрабатывать, начинаются с префикса key_
.
Итак, пишем следующий код (обратите внимание, он не оптимизирован, это просто проверка концепции):
package propertiestest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
public class PropertiesTest {
public static void main(String[] args) throws IOException {
final String PROPERTIES_FILENAME = "myapp.properties";
SpecialPropertyKeysStore spkStore =
new SpecialPropertyKeysStore(PROPERTIES_FILENAME);
System.out.println(Arrays.toString(spkStore.getKeysArray()));
}
}
class SpecialPropertyKeysStore {
private final Set<String> keys;
public SpecialPropertyKeysStore(String propertiesFileName)
throws FileNotFoundException, IOException {
// prefix of name of a special property key
final String KEY_PREFIX = "key_";
Properties propertiesHandler = new Properties();
keys = new HashSet<>();
try (InputStream input = new FileInputStream(propertiesFileName)) {
propertiesHandler.load(input);
Enumeration<?> enumeration = propertiesHandler.propertyNames();
while (enumeration.hasMoreElements()) {
String key = (String) enumeration.nextElement();
if (key.startsWith(KEY_PREFIX)) {
keys.add(key);
}
}
}
}
public boolean isKeyPresent(String keyName) {
return keys.contains(keyName);
}
public String[] getKeysArray() {
String[] strTypeParam = new String[0];
return keys.toArray(strTypeParam);
}
}
Класс SpecialPropertyKeysStore
фильтрует и собирает в свой экземпляр все специальные ключи.
И вы можете получить массив этих ключей или проверить, присутствует ли ключ или нет.
Если вы запустите этот код, вы получите:
[key_C, key_B, key_A]
Это строковое представление возвращаемого массива со специальными именами ключей.
Измените этот код, если хотите, чтобы он соответствовал вашим требованиям.
person
Community
schedule
19.08.2014