Š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.
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.
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.