Если вы хотите избежать использования языка сценариев, такого как Groovy, вы можете рассмотреть возможность использования синтаксиса конфигурации, который позволяет указывать name = список значений .Давайте предположим, что синтаксис:
name = [ "list", "of", "values" ];
При таком синтаксисе вы можете указать пары значений, чтобы обеспечить отображение от уровня символа к вероятности возникновения события.Если уровни символов изменяются от 1 до 10, а вероятности по умолчанию отражают уровень символов, то запись в файле конфигурации будет выглядеть следующим образом:
level_to_probability_mapping = [
# character level --> probability
#----------------------------------
"1", "1",
"2", "2",
"3", "3",
"4", "4",
"5", "5",
"6", "6",
"7", "7",
"8", "8",
"9", "9",
"10", "10",
];
Если синтаксис вашего файла конфигурации поддерживает только name =синтаксис с одним значением , затем вы можете эмулировать имя = список значений , задав в качестве значения строку, содержащую элементы, разделенные запятыми, а затем используйте java.util.StringTokenizer
или String.split()
разбить строку, чтобы получить доступ к отдельным элементам.
Другой подход, который является гораздо более гибким, но опасным, поскольку позволяет человеку выполнять произвольный код, выглядит следующим образом ...
Шаг 1 .Определите интерфейс Java (или абстрактный базовый класс), который определяет один метод.Например:
interface ProbabilityCalculator {
public int calculateProbabilityForLevel(int level);
}
Шаг 2 .Напишите класс «по умолчанию», который реализует этот интерфейс, используя простой алгоритм.
Шаг 3 .Разрешите администраторам написать свой собственный класс, который реализует вышеуказанный интерфейс, и добавить файл jar, содержащий этот класс, в CLASSPATH
.
Шаг 4 .Имейте переменную в файле конфигурации, укажите имя класса, который реализует вышеупомянутый интерфейс.Если эта переменная отсутствует в файле конфигурации, вернитесь к использованию имени класса реализации по умолчанию.
Шаг 5 .Используйте API отражения Java для создания экземпляра класса, указанного в файле конфигурации, а затем вызовите его метод calculateProbabilityForLevel()
.
Если вы еще не знакомы с отражением Java, посмотрите на мой Java Reflection объяснил просто презентация, чтобы узнать, что вам нужно знать.