logo

Marķiera interfeiss Java

Šajā sadaļā mēs apspriedīsim par marķiera interfeiss Java , tā lietojumi, iebūvēts ( Serializējams , Klonējams un attālās saskarnes ) un pielāgota marķiera interfeiss ar piemēriem.

Kas ir marķiera interfeiss?

An saskarne kas nesatur metodes, laukus un konstantes, ir pazīstams kā marķiera interfeiss . Citiem vārdiem sakot, tukša saskarne ir pazīstama kā marķiera interfeiss vai tagu saskarne. Tas nodrošina izpildlaika tipa informāciju par objektu. Tas ir iemesls tam, ka JVM un kompilatoram ir papildu informācija par objektu. The Serializējams un Klonējams saskarnes ir marķiera saskarnes piemērs. Īsāk sakot, tas norāda signālu vai komandu JVM.

Marķiera saskarnes deklarācija ir tāda pati kā saskarne Java, taču saskarnei ir jābūt tukšai. Piemēram:

 public interface Serializable { } 

Ir divas marķiera saskarnes alternatīvas, kas rada tādu pašu rezultātu kā marķiera saskarne.

    Iekšējie karogi:To var izmantot marķiera saskarnes vietā, lai norādītu jebkuru konkrētu darbību.Anotācijas:Kopš Java 5, marķieru saskarnes ir izlaistas . Marķiera interfeisa vietā Java 5 nodrošina anotācijas lai sasniegtu tādus pašus rezultātus. Tas nodrošina elastīgu metadatu iespēju. Tāpēc, piemērojot anotācijas jebkurai klasei, mēs varam veikt konkrētu darbību.

Marķiera interfeisa izmantošana

Marķiera interfeiss tiek izmantots kā tags, kas informē Java kompilatoru ar ziņojumu, lai tas varētu pievienot kādu īpašu uzvedību klasei, kas to ievieš. Java marķiera saskarne ir noderīga, ja mums ir informācija par klasi un šī informācija nekad nemainās, šādos gadījumos mēs izmantojam marķiera interfeisu, lai attēlotu to pašu. Tukšas saskarnes ieviešana liek kompilatoram veikt dažas darbības.

To izmanto, lai loģiski sadalītu kodu, un tas ir labs veids, kā kodu iedalīt kategorijās. Tas ir noderīgāks API izstrādei un tādos ietvaros kā Spring.

Iebūvēts marķiera interfeiss

In Java , iebūvētās marķieru saskarnes ir saskarnes, kas jau ir JDK un ir gatavas lietošanai. Ir daudz iebūvētu marķieru saskarņu, daži no tiem ir:

  • Klonējams interfeiss
  • Serializējams interfeiss
  • Attālais interfeiss

Apspriedīsimies pa vienam sīkāk.

binārā meklēšana python

Klonējams interfeiss

Tīrāms interfeiss Java ir arī marķiera interfeiss, kas pieder java.lang iepakojums. Tas ģenerē objekta ar atšķirīgu nosaukumu repliku (kopiju). Mēs varam ieviest saskarni klasē, kuras klases objektu klonēt. Tas norāda uz klons () Objektu klases metode. Ja mēs klasē neieviesam Cloneable saskarni un izsaucam metodi clone(), tas izmet ClassNotSupportedException.

Ņemiet vērā, ka klasei, kas ievieš Cloneable interfeisu, ir jāignorē klona () metode ar publisku metodi. Apskatīsim piemēru.

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

Izvade:

 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 

Serializējams interfeiss

Tā ir marķiera saskarne Java, kas ir definēta java.io iepakojums. Ja mēs vēlamies padarīt klasi serializējamu, mums ir jāievieš Serializējams saskarne. Ja klase ievieš serializējamo saskarni, mēs varam serializēt vai deserializēt šīs klases objekta stāvokli.

Serializācija (objekta pārvēršana baitu plūsmā) ir mehānisms, kurā objekta stāvoklis tiek nolasīts no atmiņas un ierakstīts failā vai datu bāzē . Deserializācija (baitu straumes pārvēršana objektā) ir pretēja serializācijai objekta stāvokļa nolasīšana no faila vai datu bāzes un ierakstīšana atpakaļ atmiņā sauc par objekta deserializāciju.

Marķiera interfeiss Java

Serializāciju (rakstīšanu) var panākt ar ObjectOutputStream klasi un deserializāciju (lasīšanu) var panākt ar ObjectInputStream klasē.

Apskatīsim serializācijas un deserializācijas piemērus.

Serializācijas piemērs

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

Izvade:

 Data has been read from the file. 

Deserializācijas piemērs

Deserializēsim objekta stāvokli.

DeserializācijaExample.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(); } } } 

Izvade:

 1187345 Andrew 

Attālais interfeiss

Attālais interfeiss ir marķiera interfeiss, kas pieder java.rmi iepakojums. Tas atzīmē objektu kā attālinātu, kam var piekļūt no citas mašīnas (resursdatora). Mums ir jāievieš attālā saskarne, ja mēs vēlamies objektu padarīt par attālu. Tas identificē saskarnes, kuru metodes var izsaukt no nelokāla JVM. Jebkuram attālam objektam interfeiss ir jāievieš tieši vai netieši.

Definēsim Remote interfeisu un ieviesīsim to Java programmā.

Attālās saskarnes definēšana

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

Ieviesiet attālo interfeisu

Ir divi veidi, kā ieviest attālo saskarni:

  • Paplašinot UnicastRemoteObject klasi
  • Izmantojot UnicastRemoteObject klases metodi exportObject().

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

Izveidojiet un palaidiet attālo lietojumprogrammu

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

Izveidojiet un palaidiet klienta lietojumprogrammu

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

Pielāgota marķiera interfeiss

Papildus iebūvētajam marķiera interfeisam Java arī ļauj mums izveidot savu marķiera interfeisu. Apskatīsim piemēru.

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

Izvade:

 Car is a vehicle. Yes, engine is working.