logo

Markörgränssnitt i Java

I det här avsnittet kommer vi att diskutera om markörgränssnitt i Java , dess använder, inbyggd ( Serialiserbar , Klonbar och fjärrgränssnitt) och anpassat markörgränssnitt med exempel.

Vad är markörgränssnitt?

En gränssnitt som inte innehåller metoder, fält och konstanter kallas markörgränssnitt . Med andra ord är ett tomt gränssnitt känt som markörgränssnitt eller tagggränssnitt. Den levererar runtime-typinformation om ett objekt. Det är anledningen till att JVM och kompilatorn har ytterligare information om ett objekt. De Serialiserbar och Klonbar gränssnitt är exemplet på markörgränssnitt. Kort sagt indikerar det en signal eller ett kommando till JVM.

Deklarationen av markörgränssnitt är detsamma som gränssnitt i Java men gränssnittet måste vara tomt. Till exempel:

 public interface Serializable { } 

Det finns två alternativ för markörgränssnitt som ger samma resultat som markörgränssnittet.

    Interna flaggor:Den kan användas i stället för markörgränssnitt för att indikera någon specifik operation.Anteckningar:Sedan Java 5, markörgränssnitt utelämnas . Istället för markörgränssnitt tillhandahåller Java 5 anteckningar för att uppnå samma resultat. Det möjliggör flexibel metadatakapacitet. Därför kan vi utföra specifik åtgärd genom att applicera anteckningar på vilken klass som helst.

Användning av Marker Interface

Markörgränssnitt används som en tagg som informerar Java-kompilatorn genom ett meddelande så att den kan lägga till något speciellt beteende till klassen som implementerar det. Java-markörgränssnitt är användbart om vi har information om klassen och den informationen aldrig ändras, i sådana fall använder vi markörgränssnitt representerar för att representera densamma. Implementering av ett tomt gränssnitt säger åt kompilatorn att utföra vissa operationer.

Det används för att logiskt dela upp koden och ett bra sätt att kategorisera kod. Det är mer användbart för att utveckla API och i ramar som Spring.

linux make-kommando

Inbyggt Marker Interface

I Java , inbyggda markörgränssnitt är de gränssnitt som redan finns i JDK och redo att användas. Det finns många inbyggda markörgränssnitt, några av dem är:

  • Klonbart gränssnitt
  • Serialiserbart gränssnitt
  • Fjärrgränssnitt

Låt oss diskutera en efter en i detalj.

Klonbart gränssnitt

Rengörbart gränssnitt i Java är också ett markörgränssnitt som hör till java.lang paket. Den genererar replika (kopia) av ett objekt med ett annat namn. Vi kan implementera gränssnittet i klassen för vilket klassobjekt som ska klonas. Det indikerar klona() metod för klassen Object. Om vi ​​inte implementerar det Cloneable-gränssnittet i klassen och anropar metoden clone() kastar den ClassNotSupportedException.

Observera att en klass som implementerar det Cloneable-gränssnittet måste åsidosätta metoden clone() med en offentlig metod. Låt oss se ett exempel.

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(); } } 

Produktion:

gränssnitt i java
 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 

Serialiserbart gränssnitt

Det är ett markörgränssnitt i Java som definieras i java.io paket. Om vi ​​vill göra klassen serialiserbar måste vi implementera Serialiserbar gränssnitt. Om en klass implementerar Serializable-gränssnittet kan vi serialisera eller deserialisera tillståndet för ett objekt i den klassen.

Serialisering (konvertera ett objekt till byteström) är en mekanism där objekttillstånd läses från minnet och skrivs in i en fil eller databas . Deserialisering (omvandla byteström till ett objekt) är motsatsen till serialisering betyder att objekttillstånd läser från en fil eller databas och skrivs tillbaka till minnet kallas deserialisering av objekt.

Markörgränssnitt i Java

Serialisering (skrivande) kan uppnås med ObjectOutputStream klass och deserialisering (läsning) kan uppnås med ObjectInputStream klass.

Låt oss se exempel på serialisering och deserialisering.

Exempel på serialisering

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

exempel på c#-kod
 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(); } } } 

Produktion:

 Data has been read from the file. 

Exempel på deserialisering

Låt oss deserialisera objekttillståndet.

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(); } } } 

Produktion:

 1187345 Andrew 

Fjärrgränssnitt

Fjärrgränssnitt är ett markörgränssnitt som tillhör java.rmi paket. Den markerar ett objekt som fjärrkontroll som kan nås från en annan maskin (värd). Vi måste implementera fjärrgränssnittet om vi vill göra ett objekt som fjärrstyrt. Den identifierar gränssnitten vars metoder kan anropas från en icke-lokal JVM. Alla fjärrobjekt måste implementera gränssnittet direkt eller indirekt.

numpy linspace

Låt oss definiera ett fjärrgränssnitt och implementera det i ett Java-program.

Definiera fjärrgränssnitt

 import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; } 

Implementera fjärrgränssnittet

Det finns följande två sätt att implementera fjärrgränssnittet:

hur många nollor i 1 miljard
  • Genom att utöka klassen UnicastRemoteObject
  • Genom att använda metoden exportObject() i klassen 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; } 

Skapa och starta fjärrapplikationen

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); } } } 

Skapa och starta klientapplikationen

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) { } } } 

Custom Marker Interface

Förutom det inbyggda markörgränssnittet låter Java oss också skapa ett eget markörgränssnitt. Låt oss se ett exempel.

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(); } } 

Produktion:

 Car is a vehicle. Yes, engine is working.