2012-02-10 3 views
1

У меня есть вопрос, на который я не уверен, можно ответить.Включить автоматически сгенерированные методы в класс java

У меня есть php-скрипт на сервере, который автоматически генерирует java-метод на основе содержимого таблицы в базе данных MySQL. Сценарий создает файл .java, в котором этот метод сохраняется.

Затем я загружаю этот метод и копирую и вставляю метод в свой основной класс java. Я думаю, что это лишний шаг. Есть ли способ включить метод в класс java, а не копировать и вставлять.

Я ищу, чтобы написать ссылку на файл method.java в точке класса java, где метод должен быть скопирован и вставлен.

Что-то вроде:

public class ShowAlert { 
      public void showAlert(String toast) throws IOException { 
    System.out.println("alert = "+externalMethod()); 
    } 

    include(externalMethod.java); 

} 

, а затем externalMethod.java имеет

public String externalMethod(){ 
return "hello world"; 
} 

Я не уверен, если это возможно, но это было бы здорово, если бы это было.

ответ

2

В Java нет объекта «включить файл». Я полагаю, что вы создаете вместо этого:

public class GeneratedClass {  
    public static String externalMethod(){ 
     return "hello world"; 
    } 
} 

и назвать его так:

GeneratedClass.externalMethod(); 

Таким образом, рукописный файл и сгенерированный файл могут быть полностью разделены.

+0

Спасибо всем за ваш быстрый ответ. Я попробую выше и ответим. Я также рассмотрю другие предложения на будущее. Шаг 1. просмотрите мои заметки о лекции по дизайну :) –

0

Чтобы создать полный класс java, вы можете использовать механизм шаблонов PHP, например Smarty. Ваш основной класс будет вашим шаблоном с заполнителем для сгенерированного метода.

1

Вы должны действительно использовать что-то вроде Java ScriptEngine (описано в JSR 223). Примеры можно найти: here.

Есть также объединения LUA для Java.

1

В идеале вы сохранили бы сгенерированный код и вручную написанный код в отдельных файлах. Таким образом вам не придется делать то, что вы делаете. Используйте предложение Асмунда. Это правильный путь. Возможно, вам придется перестроить свой код, чтобы это было возможно, но лучше сейчас, чем позже.

Я прошу вас пройти лишнюю милю и использовать интерфейсы. Ваш сгенерированный код должен реализовывать интерфейс, а ваш ручной код должен ссылаться на все, используя только интерфейс. У вас может быть Factory, который возвращает экземпляр.

Это позволит вам увеличить развязку ручного кода и сгенерированного кода. Я бы подумал, что вы бы это сделали, используя шаблон DAO (объект доступа к данным) в определенной степени. Образец DAO работает лучше всего, если вы сохраните сгенерированный код отдельно и получите доступ к нему с помощью интерфейсов. Использование интерфейсов позволит вам изменить реализацию DAO во что-то еще во время выполнения - например, для запуска модульных тестов.

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