Я думаю, что ответ @sateesh - тот, который ближе к решению вашей проблемы. Позвольте мне остановиться на этом подробнее. Прежде всего, обязательно, чтобы любой класс, реализующий интерфейс, предоставил определения для всех своих методов. Но в некоторых случаях пользователь может не найти применения для большинства методов интерфейса, кроме одного или двух. Рассмотрим следующий интерфейс, имеющий 6 абстрактных методов:
public interface HugeInterface {
void a();
void b();
void c();
void d();
void e();
void f();
}
Предположим, что ваш код находит использование только для метода 'c ()', и вы хотите предоставить подробности реализации только для метода 'c ()'. Вы можете создать новый класс HugeInterfaceAdapter
в отдельном файле, который реализует все методы интерфейса HugeInterface
, как показано ниже:
public class HugeInterfaceAdapter implements HugeInterface {
public void a() {}
public void b() {}
public void c() {}
public void d() {}
public void e() {}
public void f() {}
}
Обратите внимание, что вам не нужно предоставлять какой-либо фактический код реализации для любого из методов. Теперь начинается интересная часть. Да, ваш класс, в котором необходимость реализации огромного интерфейса возникла в первую очередь.
public class MyClass {
HugeInterfaceAdapter mySmallInterface = new HugeInterfaceAdapter() {
@Override
public void c() {
//Your class-specific interface implementation code here.
}
};
}
Теперь вы можете использовать справочную переменную mySmallInterface
во всех местах, где ожидается HugeInterface
. Это может показаться немного хакерским, но я могу сказать, что оно официально одобрено Java, и такие классы, как MouseAdapter , свидетельствуют об этом.