Перейти к типу с динамическим именем (Java) - PullRequest
0 голосов
/ 26 июня 2011

Я создаю программу, которая должна открывать различные перспективы . Перспективы в моей программе означают разные макеты элементов управления.Пользователь может создавать и выбирать, какую перспективу он хочет использовать.Существует также Перспектива по умолчанию . Перспектива по умолчанию может быть выбрана.

Из-за этого я не знает, сколько существует перспектив, или что Перспектива по умолчанию есть.Моя программа использует engine.perspective для чтения и записи в текстовый файл (Perspective.TXT), в котором хранятся все перспективы.Когда пользователь создает перспективу, моя программа автоматически создает файл *.JAVA со всеми данными перспективы.Это мой код для чтения Perspective.TXT и вызова правильного типа:

    ArrayList<String> ALLPRSPCTVE = Read.getAllPerspectives();
    String PRSPCTVE = Read.getDefaultPerspective();

    {
        String[] ARR = (String[]) ALLPRSPCTVE.toArray();
        for (int i = 0; i < ALLPRSPCTVE.size(); i++) {// Set All Perspectives
            if (PRSPCTVE == ARR[i]) {

            }
        }
    }

Как изменить String, возвращенный методом Read.getAllPerspectives, на что-то, что JAVA распознает как тип, и перейдет кэто?

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

У вас проблема с архитектурой программного обеспечения.

Но, если вы хотите сделать именно то, что говорите, вы все равно можете сделать это возможным, даже если это не правильный путь.

  • вам нужно вызвать компилятор java для преобразования вашего java-файла в файл класса
  • , а затем вы можете использовать отражение для динамической загрузки класса (используя Class.forName)
  • и, наконец, создайте экземпляр этого класса, чтобы получить новый объект, методы которого можно использовать, что было бы намного проще, если бы у вас был общий интерфейс для всех этих классов.

Но, пожалуйста, не надосделайте это и продолжайте читать.

Алан Тьюринг представил современный компьютер в середине 20-х годов.Одна из его основных функций заключается в том, что он отделяет данные от кода.

Данные - это часть памяти, содержащая переменные, а код - это набор инструкций, которые манипулируют этими данными (и другими элементами, создаваемыми во время жизни программ. В Java,программа / код написан внутри классов).

Затем данные можно разделить на две разные поддержки: динамическую, быструю и энергозависимую память (современное ОЗУ) и долговременное хранилище (жесткий диск / база данных).

Обратите внимание, что код - это данные.Он должен быть сохранен на диске, загружен в память, но выполнен.Простые данные не выполняются, это просто данные, считываются и записываются, но не выполняются.

Это имеет очень практические последствия для всех приложений, и ваше приложение нарушает его разделение данных, и код использует код (классы Java).) для запоминания данных.

Вот что вы должны сделать:

  • сохранить ваши данные в формате, который не имеет ничего общего с Java.Для простого формата, в котором поля имеют значения, вы можете использовать файл свойств ( руководство здесь ).Это будет ваше решение для долгосрочного хранения.
  • Затем попробуйте объединить все функции, связанные с чтением, манипулированием и записью этих свойств, в отдельный класс, с открытыми методами, которые ваши классы смогут вызывать длядоступ к этим данным.
1 голос
/ 26 июня 2011

использовать Class.forName (имя) .newInstance ()

...