Как избежать реализации всех методов - PullRequest
0 голосов
/ 05 июня 2019

Я использую интерфейс для обратного вызова, который я использую во многих классах, поэтому, когда я реализую этот обратный вызов, мне нужно переопределить все методы, но я использовал только 1 или 2 из этого класса. Как мне этого избежать?

Это обратный вызов:

public interface DatabaseCallback {

    void onContactPhotoSaved();

    void onContactPhotoUpdated();

    void onContactPhotoDeleted();

    void onContactPhotoFounded(ContactInfo item);

    void onDataNotAvailable();

    void onErrorDuringProcess();

    void onContactPhotoLoaded(List<ContactInfo> users);

}

EDIT:

Это возможно ??

public class DatabaseManagerCallback {

public interface ContactInfoInsertCallback{
    void onContactPhotoSaved();
    void onErrorOcurred();
}

public interface ContactInfoUpdateCallback{
    void onContactPhotoUpdated();
    void onErrorOcurred();
}

public interface ContactInfoDeleteCallback{
    void onContactPhotoDeleted();
    void onErrorOcurred();
}

public interface ContactInfoFoundedCallback{
    void onContactPhotoFounded(ContactInfo item);
    void onErrorOcurred();
}

}

Ответы [ 3 ]

2 голосов
/ 05 июня 2019

Напишите класс, который реализует все функции, но имеет пустое тело для каждой.Затем расширите ваши классы, чтобы они наследовали пустые функции тела.

Если вы являетесь владельцем класса интерфейса, вы также можете рассмотреть возможность предоставления им реализации по умолчанию, которая ничего не делает.Но если это библиотечный класс, это не сработает.

0 голосов
/ 05 июня 2019

Вы можете создать класс, который реализует все методы и затем наследовать от него:


public class MyDatabaseCallback implements DatabaseCallback{

    @Override void onContactPhotoSaved(){}

    @Override void onContactPhotoUpdated(){}

    @Override void onContactPhotoDeleted(){}

    @Override void onContactPhotoFounded(ContactInfo item){}

    @Override void onDataNotAvailable(){}

    @Override void onErrorDuringProcess(){}

    @Override void onContactPhotoLoaded(List<ContactInfo> users){}

}

Теперь все, что вам нужно сделать, это наследовать от MyDatabaseCallback:

public class MyCustomDatabaseCallback extends MyDatabaseCallback {
    @Override void onDataNotAvailable(){
        // TODO
    }
}
0 голосов
/ 05 июня 2019

Есть только две вещи, которые вы можете сделать с реализацией интерфейса на языке Java:

  • Реализуйте все методы (как вы говорите).
  • Реализуйте только несколько методов и объявите абстрактный класс (и, следовательно, вы не можете его создать).

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

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