В моем проекте GWTQuery у меня есть ситуация, когда есть 4 настраиваемых раскрывающихся меню. Каждый раз, когда пользователь изменяет любой из текущего выбора меню, выполняется запрос AJAX со значениями 4 меню (одно из которых является вновь измененным значением этого меню). Поскольку все 4 меню запускают аналогичный запрос, я подумал, что напишу общий класс для обработки запроса AJAX, а затем позволю обработчикам кликов расширить этот класс.
Но тогда, когда меню генерируются динамически, мне приходится прибегать к методу GWTQuery live
. И это принимает в качестве параметра переменную типа Function
. Поскольку он уже расширяет функцию, я не могу заставить его расширять и мой класс обработчика Ajax. Так как мне это сделать? Что-то вроде этого я ищу:
class f extends Funnction, AJAX_Handler {
public boolean f(Event e) {
...
return true;
}
public void request(int i1,int i2,int i3,int i4) {
//for handling the request, defined in the AJAX_Handler class
...
}
}
Одно дело: определить общий обработчик для всех 4 меню, которые содержат функции AJAX_handler, а затем определить, какое меню является текущим обработчиком, на который ссылается, - нет-нет. Класс AJAX_handler должен быть отдельным.
1 ответ
Вместо этого определите интерфейсы.
public interface AJAX_Handler
{
public void request(int i1,int i2,int i3,int i4);
}
Затем в вашем фактическом классе реализуйте определенный интерфейс.
class f extends Funnction implements AJAX_Handler
{
public boolean f(Event e) {
...
return true;
}
public void request(int i1,int i2,int i3,int i4) {
//for handling the request, defined in the AJAX_Handler class
...
}
}
[РЕДАКТИРОВАТЬ] Учитывая, что вам нужно сохранить функциональность в одном и том же месте. Я думаю, что самым простым решением было бы определить интерфейс AJAX_Handler, а затем иметь реализованный класс. Например:
public class AJAX_HandlerImpl implements AJAX_Handler
{
public void request(int i1,int i2,int i3,int i4){
//do whats necessary
}
}
Затем используйте композицию в своем классе f. Что-то вроде:
class f extends Funnction implements AJAX_Handler
{
private AJAX_HandlerImpl impl = new AJAX_HandlerImpl();
public boolean f(Event e) {
...
return true;
}
public void request(int i1,int i2,int i3,int i4) {
impl.request(i1,i2,i3,i4);
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
request
довольно обширное и сложное. Так что, если я объявлю это просто как интерфейс, мне придется реализовать его полностью для всех 4 обработчиков, это именно то, чего я пытаюсь избежать ..