В java, если мы реализуем интерфейс в классе, мы должны предоставить реализацию методам, присутствующим в интерфейсе., Но в случае интерфейса Serializable нам не нужно предоставлять реализацию для методы представлены в интерфейсе Serializable.Почему ???Концепция реализации интерфейса
ответ
, но в случае интерфейса Serializable нам не нужно предоставлять реализации методам, присутствующим в Serializable interface.Why ???
Потому что для маркировки только целей и не содержит не методы реализации.
Когда класс «с пометкой« »с интерфейсом Serializable
, это просто означает, что он должен/может быть сериализован/де-сериализован.
От компании Oracle docs:
Классы, которые не реализуют этот интерфейс не будет иметь какой-либо из их состояния сериализованная или десериализации. Все подтипы сериализуемого класса сами являются сериализуемыми. Интерфейс сериализации не имеет методов или полей , а служит только для определения семантики нахождения serializable.
И от Wikipedia:
Пример применения маркерных интерфейсов от языка программирования Java является Serializable интерфейс. Класс реализует этот интерфейс, чтобы указать, что его непереходные элементы данных могут быть , записанные в ObjectOutputStream. ObjectOutputStream private метод writeObject() содержит последовательность экземпляров тестов до , определяющих способность к записи, одна из которых ищет интерфейс Serializable . Если какой-либо из этих тестов выходит из строя, метод генерирует NotSerializableException.
Например, если следующий класс would't был отмечен с интерфейсом Serializable
:
public class Employee implements java.io.Serializable
{
public String name;
...
}
Тогда следующий код сериализации будет иметь завершаться NotSerializableException
:
Employee e = new Employee();
e.name = "Reyan Ali";
FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in /tmp/employee.ser");
Примечание к расширению файла *.ser
, оно используется, когда w ринирование сериализованных java-объектов в файлы.
Я действительно хочу знать, как интерфейс-маркер работает внутри? –
- 1. Концепция интерфейса Java
- 2. Концепция реализации HashMap
- 3. Почему концепция «ковариации» и «контравариантности» применима при реализации методов интерфейса?
- 4. Java дерево родитель реализации и ребенок концепция
- 5. Преимущества Singleton реализации интерфейса
- 6. Структура интерфейса и реализации?
- 7. Метод скрытия реализации интерфейса
- 8. Регистрация реализации COM-интерфейса
- 9. Выполнение реализации интерфейса асинхронно
- 10. IronPython Свойства реализации интерфейса
- 11. Преимущества реализации интерфейса
- 12. Задание реализации интерфейса
- 13. TinyIoC - Множественные реализации интерфейса
- 14. Проблема реализации сравнимого интерфейса
- 15. Задержка реализации методов интерфейса?
- 16. Расширение реализации интерфейса?
- 17. Ошибка при реализации интерфейса
- 18. Проблема реализации интерфейса Java
- 19. Ошибка реализации интерфейса компиляции
- 20. путаница в реализации интерфейса
- 21. Правильный способ реализации интерфейса
- 22. Отдельные реализации интерфейса
- 23. Ошибка «Ошибка реализации интерфейса»
- 24. Параметр реализации интерфейса Java
- 25. Циклическое наследование в реализации реализации интерфейса Фрагмента
- 26. Тип интерфейса Переопределение реализации другого интерфейса
- 27. Ошибка реализации интерфейса интерфейса класса C++
- 28. Обеспечение реализации интерфейса интерфейса как enum
- 29. F12 - Перейти к реализации интерфейса
- 30. Ошибка TypeScript при реализации интерфейса
Интерфейс Serializable не содержит никаких методов. Я думаю, что версия TL; DR - это потому, что потребность в данных Serialize появилась до того, как в Java были аннотации. Если бы вы сделали это сегодня, вы, вероятно, использовали бы аннотацию, так же JPA использует @Entity, но изменение этого приведет к поломке всего кода. –