У цьому розділі ми обговоримо про інтерфейс маркера в Java , його використовує, вбудований ( Серіалізований , Можливість клонування і віддалені інтерфейси) і призначений для користувача інтерфейс маркера з прикладами.
Що таке інтерфейс маркера?
Ан інтерфейс який не містить методів, полів і констант, відомий як інтерфейс маркера . Іншими словами, порожній інтерфейс відомий як інтерфейс маркера або інтерфейс тегів. Він надає інформацію про тип об’єкта під час виконання. Це причина того, що JVM і компілятор мають додаткову інформацію про об’єкт. The Серіалізований і Можливість клонування інтерфейси є прикладом маркерного інтерфейсу. Коротше кажучи, це вказує на сигнал або команду для JVM.
Оголошення інтерфейсу маркера таке саме, як інтерфейс у Java, але інтерфейс має бути порожнім. Наприклад:
public interface Serializable { }
Існують дві альтернативи інтерфейсу маркера, які дають той самий результат, що і інтерфейс маркера.
Використання маркерного інтерфейсу
Інтерфейс маркера використовується як тег, який інформує компілятор Java повідомленням, щоб він міг додати певну особливу поведінку до класу, який його реалізує. Інтерфейс маркера Java корисний, якщо ми маємо інформацію про клас, і ця інформація ніколи не змінюється, у таких випадках ми використовуємо інтерфейс маркера, щоб представити те саме. Реалізація порожнього інтерфейсу повідомляє компілятору про виконання деяких операцій.
Він використовується для логічного поділу коду та є хорошим способом класифікації коду. Це більш корисно для розробки API та фреймворків, таких як Spring.
Вбудований інтерфейс маркера
в Java , вбудовані маркерні інтерфейси – це інтерфейси, які вже присутні в JDK і готові до використання. Існує багато вбудованих інтерфейсів маркерів, деякі з них:
- Клонований інтерфейс
- Серіалізований інтерфейс
- Віддалений інтерфейс
Давайте обговоримо по черзі детально.
мамта кулькарні
Клонований інтерфейс
Очищуваний інтерфейс в Java також є маркерний інтерфейс, до якого належать java.lang пакет. Він створює репліку (копію) об'єкта з іншою назвою. Ми можемо реалізувати інтерфейс у класі, об’єкт якого класу потрібно клонувати. Це вказує на клонувати() метод класу Object. Якщо ми не реалізуємо інтерфейс Cloneable у класі та викликаємо метод clone(), він викидає ClassNotSupportedException.
Зверніть увагу, що клас, який реалізує інтерфейс Cloneable, повинен замінити метод clone() публічним методом. Давайте розглянемо приклад.
Product.java
import java.util.Scanner; public class Product implements Cloneable { int pid; String pname; double pcost; //Product class constructor public Product (int pid, String pname, double pcost) { this.pid = pid; this.pname = pname; this.pcost = pcost; } //method that prints the detail on the console public void showDetail() { System.out.println('Product ID: '+pid); System.out.println('Product Name: '+pname); System.out.println('Product Cost: '+pcost); } public static void main (String args[]) throws CloneNotSupportedException { //reading values of the product from the user Scanner sc = new Scanner(System.in); System.out.print('Enter product ID: '); int pid = sc.nextInt(); System.out.print('Enter product name: '); String pname = sc.next(); System.out.print('Enter product Cost: '); double pcost = sc.nextDouble(); System.out.println('-------Product Detail--------'); Product p1 = new Product(pid, pname, pcost); //cloning the object of the Product class using the clone() method Product p2 = (Product) p1.clone(); //invoking the method to print detail p2.showDetail(); } }
Вихід:
диспетчер завдань для linux
Enter product ID: 139872 Enter product name: Printer Enter product Cost: 3459.67 -------Product Detail-------- Product ID: 139872 Product Name: Printer Product Cost: 3459.67
Серіалізований інтерфейс
Це інтерфейс маркера в Java, який визначено в java.io пакет. Якщо ми хочемо зробити клас серіалізованим, ми повинні реалізувати Серіалізований інтерфейс. Якщо клас реалізує інтерфейс Serializable, ми можемо серіалізувати або десеріалізувати стан об’єкта цього класу.
Серіалізація (перетворення об'єкта в потік байтів) — це механізм, у якому стан об’єкта зчитується з пам’яті та записується у файл або базу даних . Десеріалізація (перетворення потоку байтів в об'єкт) є протилежністю серіалізації, що означає зчитування стану об’єкта з файлу або бази даних і запис назад у пам’ять називається десеріалізацією об'єкта.
Серіалізація (запис) може бути досягнута за допомогою ObjectOutputStream класу та десеріалізації (читання) можна досягти за допомогою ObjectInputStream клас.
Давайте розглянемо приклад серіалізації та десеріалізації.
Приклад серіалізації
Employee.java
import java.io.Serializable; public class Employee implements Serializable { int empid; String empname; public Employee(int empid, String empname) { this.empid = empid; this.empname = empname; } }
SerializationExample.java
import java.io.*; class SerializationExample { public static void main(String args[]) { try { //Creating the object Employee emp =new Employee(1187345,'Andrew'); //Creating stream and writing the object FileOutputStream fout=new FileOutputStream('employee data.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(emp); out.flush(); //closing the stream out.close(); System.out.println('Data has been read from the file.'); } catch(Exception e) { e.printStackTrace(); } } }
Вихід:
Data has been read from the file.
Приклад десеріалізації
Давайте десеріалізуємо стан об’єкта.
DeserializationExample.java
import java.io.*; class DeserializationExample { public static void main(String args[]) { try { //Creating stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('employee data.txt')); Employee emp=(Employee)in.readObject(); //printing the data of the serialized object System.out.println(emp.empid+' '+emp.empname); //closing the stream in.close(); } catch(Exception e) { e.printStackTrace(); } } }
Вихід:
1187345 Andrew
Віддалений інтерфейс
Віддалений інтерфейс це інтерфейс маркера, який належить java.rmi пакет. Він позначає об’єкт як віддалений, до якого можна отримати доступ з іншої машини (хосту). Ми повинні реалізувати інтерфейс Remote, якщо хочемо зробити об’єкт віддаленим. Він визначає інтерфейси, чиї методи можуть бути викликані з нелокальної JVM. Будь-який віддалений об'єкт повинен реалізовувати інтерфейс прямо або опосередковано.
Давайте визначимо віддалений інтерфейс і реалізуємо його в програмі Java.
Визначення віддаленого інтерфейсу
import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; }
Впровадити віддалений інтерфейс
Існує два способи реалізації віддаленого інтерфейсу:
- Розширюючи клас UnicastRemoteObject
- За допомогою методу exportObject() класу UnicastRemoteObject
AddAllRemote.java
import java.rmi.*; import java.rmi.server.*; public class AddAllRemote extends UnicastRemoteObject implements Adder { AddAllRemote()throws RemoteException { super(); } public int add(int r, int s) { return r+s; }
Створіть і запустіть програму Remote
Server.java
import java.rmi.*; import java.rmi.registry.*; public class Server { public static void main(String args[]) { try { AddAll stub=new AddAllRemote(); Naming.rebind('rmi://localhost:5000/sak',stub); } catch(Exception e) { System.out.println(e); } } }
Створіть і запустіть клієнтську програму
Client.java
import java.rmi.*; public class Client { public static void main(String args[]) { try { AddAll stub=(AddAll)Naming.lookup('rmi://localhost:5000/sak'); System.out.println(stub.add(29,18)); } catch(Exception e) { } } }
Користувацький інтерфейс маркера
Окрім вбудованого інтерфейсу маркерів, Java також дозволяє нам створювати власний інтерфейс маркерів. Давайте розглянемо приклад.
CustomMarkerInterfaceExample.java
бульбашкове сортування в алгоритмі
//custom marker interface interface Car { } //custom marker interface interface Engine { } //class that implements the Car marker interface class Vehicle implements Car { static void isVehicle() { System.out.println('Car is a vehicle.'); } } //class that implements the Engine marker interface class Status implements Engine { static void isWorking() { System.out.println('Yes, engine is working.'); } } //main class public class CustomMarkerInterfaceExample { public static void main(String args[]) { //invoking the methods of the class Vehicle.isVehicle(); Status.isWorking(); } }
Вихід:
Car is a vehicle. Yes, engine is working.