logo

Маркерен интерфейс в Java

В този раздел ще обсъдим за маркерен интерфейс в Java , неговото използва, вграден ( Може да се сериализира , Може да се клонира и отдалечени интерфейси) и персонализиран интерфейс на маркера с примери.

Какво е маркерен интерфейс?

Ан интерфейс който не съдържа методи, полета и константи е известен като маркерен интерфейс . С други думи, празен интерфейс е известен като маркерен интерфейс или интерфейс на етикета. Той доставя информация за типа по време на изпълнение за даден обект. Това е причината, че JVM и компилаторът имат допълнителна информация за даден обект. The Може да се сериализира и Може да се клонира интерфейсите са пример за маркерен интерфейс. Накратко, той показва сигнал или команда към JVM.

Декларацията на интерфейса на маркера е същата като интерфейса в Java, но интерфейсът трябва да е празен. Например:

 public interface Serializable { } 

Има две алтернативи на интерфейса на маркера, който дава същия резултат като интерфейса на маркера.

    Вътрешни флагове:Може да се използва вместо интерфейс на маркер за обозначаване на всяка конкретна операция.анотации:От Java 5, интерфейсите на маркерите са пропуснати . Вместо маркерен интерфейс, Java 5 предоставя анотации за постигане на същите резултати. Позволява гъвкави възможности за метаданни. Следователно, като прилагаме анотации към всеки клас, можем да извършим конкретно действие.

Използване на интерфейса на маркера

Интерфейсът на маркера се използва като таг, който информира Java компилатора чрез съобщение, така че да може да добави някакво специално поведение към класа, който го прилага. Маркерният интерфейс на Java е полезен, ако имаме информация за класа и тази информация никога не се променя, в такива случаи използваме маркерен интерфейс за представяне, за да представим същото. Внедряването на празен интерфейс казва на компилатора да извърши някои операции.

Използва се за логическо разделяне на кода и е добър начин за категоризиране на кода. Той е по-полезен за разработване на API и в рамки като Spring.

Вграден интерфейс за маркери

в Java , вградените маркерни интерфейси са интерфейсите, които вече присъстват в JDK и са готови за използване. Има много вградени интерфейси за маркери, някои от тях са:

  • Интерфейс за клониране
  • Сериализиращ се интерфейс
  • Дистанционен интерфейс

Нека обсъдим един по един в детайли.

vlc за изтегляне на youtube

Интерфейс за клониране

Почистващ се интерфейс в Java също е маркерен интерфейс, който принадлежи към java.lang пакет. Той генерира реплика (копие) на обект с различно име. Можем да имплементираме интерфейса в класа на кой клас обект да бъде клониран. То показва, клонинг() метод на класа Object. Ако не имплементираме интерфейса Cloneable в класа и извика метода clone(), той хвърля ClassNotSupportedException.

Имайте предвид, че клас, който имплементира интерфейса Cloneable, трябва да замени метода clone() с публичен метод. Да видим един пример.

Продукт.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(); } } 

Изход:

np.свързване
 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, можем да сериализираме или десериализираме състоянието на обект от този клас.

Сериализацията (преобразуване на обект в поток от байтове) е механизъм, при който състоянието на обекта се чете от паметта и се записва във файл или база данни . Десериализацията (преобразуване на потока от байтове в обект) е обратното на сериализацията, което означава, че четене на състоянието на обекта от файл или база данни и записване обратно в паметта се нарича десериализация на обект.

Маркерен интерфейс в Java

Сериализация (писане) може да се постигне с ObjectOutputStream клас и десериализация (четене) може да се постигне с ObjectInputStream клас.

Нека видим пример за сериализация и десериализация.

Пример за сериализация

Служител.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; } 

Създайте и стартирайте отдалеченото приложение

Сървър.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.