logo

Markørgrensesnitt i Java

I denne delen vil vi diskutere om markørgrensesnitt i Java , det er bruker, innebygd ( Serialiserbar , Klonbar , og eksterne grensesnitt) og tilpasset markørgrensesnitt med eksempler.

Hva er markørgrensesnitt?

An grensesnitt som ikke inneholder metoder, felt og konstanter er kjent som markørgrensesnitt . Med andre ord er et tomt grensesnitt kjent som markørgrensesnitt eller tag-grensesnitt. Den leverer kjøretidstypeinformasjon om et objekt. Det er grunnen til at JVM og kompilatoren har tilleggsinformasjon om et objekt. De Serialiserbar og Klonbar grensesnitt er eksempelet på markørgrensesnitt. Kort sagt, det indikerer et signal eller kommando til JVM.

Deklarasjonen av markør-grensesnitt er det samme som grensesnitt i Java, men grensesnittet må være tomt. For eksempel:

 public interface Serializable { } 

Det er de to alternativene for markørgrensesnitt som gir samme resultat som markørgrensesnittet.

    Interne flagg:Den kan brukes i stedet for markørgrensesnitt for å indikere en spesifikk operasjon.Merknader:Siden Java 5, markørgrensesnitt er utelatt . I stedet for markørgrensesnitt gir Java 5 merknader for å oppnå de samme resultatene. Det tillater fleksibel metadata. Derfor, ved å bruke merknader til en hvilken som helst klasse, kan vi utføre spesifikke handlinger.

Bruk av Marker Interface

Marker-grensesnitt brukes som en kode som informerer Java-kompilatoren med en melding slik at den kan legge til spesiell oppførsel til klassen som implementerer den. Java markørgrensesnitt er nyttig hvis vi har informasjon om klassen og den informasjonen aldri endres, i slike tilfeller bruker vi markørgrensesnitt representere for å representere det samme. Implementering av et tomt grensesnitt forteller kompilatoren å gjøre noen operasjoner.

Den brukes til å logisk dele koden og en god måte å kategorisere kode på. Det er mer nyttig for å utvikle API og i rammeverk som Spring.

Innebygd Marker Interface

I Java , innebygde markørgrensesnitt er grensesnittene som allerede er til stede i JDK og klare til bruk. Det er mange innebygde markørgrensesnitt, noen av dem er:

  • Klonbart grensesnitt
  • Serialiserbart grensesnitt
  • Eksternt grensesnitt

La oss diskutere en etter en i detalj.

hva er desktop ini

Klonbart grensesnitt

Rengjørbart grensesnitt i Java er også et markørgrensesnitt som hører til java.lang pakke. Den genererer replika (kopi) av et objekt med et annet navn. Vi kan implementere grensesnittet i klassen for hvilket klasseobjekt som skal klones. Det indikerer klone() metoden til Object-klassen. Hvis vi ikke implementerer Cloneable-grensesnittet i klassen og påkaller clone()-metoden, kaster den ClassNotSupportedException.

Merk at en klasse som implementerer Cloneable-grensesnittet må overstyre clone()-metoden med en offentlig metode. La oss se et eksempel.

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

Produksjon:

javascript window.open
 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 grensesnitt

Det er et markørgrensesnitt i Java som er definert i java.io pakke. Hvis vi ønsker å gjøre klassen serialiserbar, må vi implementere Serialiserbar grensesnitt. Hvis en klasse implementerer Serializable-grensesnittet, kan vi serialisere eller deserialisere tilstanden til et objekt i den klassen.

Serialisering (konvertering av et objekt til bytestrøm) er en mekanisme der objekttilstand leses fra minnet og skrives inn i en fil eller database . Deserialisering (konvertere bytestrøm til et objekt) er det motsatte av serialisering betyr det objekttilstand lesing fra en fil eller database og skrevet tilbake til minnet kalles deserialisering av objekt.

Markørgrensesnitt i Java

Serialisering (skriving) kan oppnås med ObjectOutputStream klasse og deserialisering (lesing) kan oppnås med ObjectInputStream klasse.

La oss se eksempler på serialisering og deserialisering.

Eksempel 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

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

Produksjon:

 Data has been read from the file. 

Eksempel på deserialisering

La oss deserialisere objekttilstanden.

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

Produksjon:

 1187345 Andrew 

Eksternt grensesnitt

Eksternt grensesnitt er et markørgrensesnitt som tilhører java.rmi pakke. Den markerer et objekt som eksternt som kan nås fra en annen maskin (vert). Vi må implementere Remote-grensesnittet hvis vi ønsker å gjøre et objekt som eksternt. Den identifiserer grensesnittene hvis metoder kan påkalles fra en ikke-lokal JVM. Ethvert eksternt objekt må implementere grensesnittet direkte eller indirekte.

La oss definere et eksternt grensesnitt og implementere det i et Java-program.

Definere eksternt grensesnitt

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

Implementer det eksterne grensesnittet

Det er følgende to måter å implementere det eksterne grensesnittet på:

  • Ved å utvide UnicastRemoteObject-klassen
  • Ved å bruke exportObject()-metoden til UnicastRemoteObject-klassen

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

Opprett og start den eksterne applikasjonen

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

Opprett og start klientapplikasjonen

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

Bortsett fra innebygd markørgrensesnitt, lar Java oss også lage eget markørgrensesnitt. La oss se et eksempel.

CustomMarkerInterfaceExample.java

haug og haug sortering
 //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(); } } 

Produksjon:

 Car is a vehicle. Yes, engine is working.