У меня есть структура классов для чтения данных из пакета ресурсов (файлов свойств).
import java.util.Locale;
import java.util.Objects;
import java.util.ResourceBundle;
/**
* The class will be used to read the resource bundle to achieve localization
* and internationalization
*
*/
public class ResourceBundleReader {
private String resourceBundle = null;
/**
* Constructor of the class
*
* @param resourceBundle
* @throws NullPointerException
* if resourceBundle is null
*/
public ResourceBundleReader(final String resourceBundle) {
Objects.requireNonNull(resourceBundle);
this.resourceBundle = resourceBundle;
}
/**
* Return message by input key for default locale
*
* @param key
* @return
*/
public String getMessage(final String key) {
return getMessage(key, Locale.getDefault());
}
/**
* Return message by input key for input locale locale
*
* @param key
* @return
*/
public String getMessage(final String key, final Locale locale) {
final ResourceBundle mybundle = ResourceBundle.getBundle(resourceBundle, locale);
return mybundle.getString(key);
}
}
Поскольку существует несколько типов пакетов ресурсов, я создал для этого индивидуальную реализацию. Например, ниже два:
Сообщение об исключении:
public final class ExceptionMessageResolver {
private static final String EXCEPTION_MESSAGES_RESOURCE = "exceptionmessages"; //$NON-NLS-1$
private static final ResourceBundleReader RESOURCE_BUNDLE_READER = new ResourceBundleReader(
EXCEPTION_MESSAGES_RESOURCE);
/**
* Private constructor to prevent instantiation Constructor of the class
*/
private ExceptionMessageResolver() {
super();
}
/**
* return exception message by default locale
*
* @param key
* @return
*/
public static String getMessage(final String key) {
return getMessage(key, Locale.getDefault());
}
/**
* Return exception message for input locale
*
* @param key
* @param locale
* @return
*/
public static String getMessage(final String key, final Locale locale) {
return RESOURCE_BUNDLE_READER.getMessage(key, locale);
}
}
Ярлыки сообщений:
public final class ResourceLabelResolver {
private static final String LABEL_RESOURCE = "resourcelabels"; //$NON-NLS-1$
private static final ResourceBundleReader RESOURCE_BUNDLE_READER = new ResourceBundleReader(LABEL_RESOURCE);
/**
* Private constructor to prevent instantiation Constructor of the class
*/
private ResourceLabelResolver() {
super();
}
/**
* return label message by default locale
*
* @param key
* @return
*/
public static String getMessage(final String key) {
return getMessage(key, Locale.getDefault());
}
/**
* Return label message for input locale
*
* @param key
* @param locale
* @return
*/
public static String getMessage(final String key, final Locale locale) {
return RESOURCE_BUNDLE_READER.getMessage(key, locale);
}
}
Есть ли для этого более элегантный способ? Или каким-либо способом создать класс abase для двух моих читателей, чтобы предотвратить дублирование методов в коде?