În această secțiune, vom discuta despre interfață marker în Java , este utilizări, încorporat ( Serializabil , Clonabil și interfețe de la distanță) și interfață de marcare personalizată cu exemple.
Ce este interfața markerului?
Un interfata care nu conține metode, câmpuri și constante este cunoscut ca interfata markerului . Cu alte cuvinte, o interfață goală este cunoscută ca interfata markerului sau interfață de etichetă. Oferă informații despre tipul de rulare despre un obiect. Este motivul pentru care JVM și compilatorul au informații suplimentare despre un obiect. The Serializabil și Clonabil interfețele sunt exemplu de interfață marker. Pe scurt, indică un semnal sau o comandă către JVM.
Declarația de interfață marker este aceeași cu interfața în Java, dar interfața trebuie să fie goală. De exemplu:
public interface Serializable { }
Există două alternative de interfață marker care produce același rezultat ca și interfața marker.
Utilizări ale interfeței Marker
Interfața marker este folosită ca o etichetă care informează compilatorul Java printr-un mesaj, astfel încât să poată adăuga un comportament special clasei care o implementează. Interfața marker Java sunt utile dacă avem informații despre clasă și informațiile respective nu se schimbă niciodată, în astfel de cazuri, folosim interfața marker pentru a reprezenta aceeași. Implementarea unei interfețe goale îi spune compilatorului să facă unele operații.
Este folosit pentru a împărți codul în mod logic și o modalitate bună de a clasifica codul. Este mai util pentru dezvoltarea API și în cadre precum Spring.
Interfață de marcare încorporată
În Java , interfețele de marcare încorporate sunt interfețele care sunt deja prezente în JDK și gata de utilizare. Există multe interfețe de marcare încorporate, unele dintre ele sunt:
obiect java la json
- Interfață clonabilă
- Interfață serializabilă
- Interfață de la distanță
Să discutăm unul câte unul în detaliu.
Interfață clonabilă
Interfață care poate fi curățată în Java este, de asemenea, o interfață de marcare care îi aparține java.lang pachet. Acesta generează replica (copie) a unui obiect cu nume diferit. Putem implementa interfața în clasa în care obiectul clasei va fi clonat. Acesta indică clona() metoda clasei Object. Dacă nu implementăm interfața Cloneable în clasă și invocăm metoda clone(), aceasta aruncă ClassNotSupportedException.
Rețineți că o clasă care implementează interfața Cloneable trebuie să suprascrie metoda clone() cu o metodă publică. Să vedem un exemplu.
Produs.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(); } }
Ieșire:
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
Interfață serializabilă
Este o interfață de marcare în Java care este definită în java.io pachet. Dacă vrem să facem clasa serializabilă, trebuie să implementăm Serializabil interfață. Dacă o clasă implementează interfața Serializable, putem serializa sau deserializa starea unui obiect din acea clasă.
Serializarea (conversia unui obiect în flux de octeți) este un mecanism prin care starea obiectului este citită din memorie și scrisă într-un fișier sau bază de date . Deserializarea (conversia fluxului de octeți într-un obiect) este opusul serializării înseamnă că starea obiectului citire dintr-un fișier sau bază de date și scris înapoi în memorie se numește deserializarea obiectului.
Serializarea (scrierea) poate fi realizată cu ObjectOutputStream clasa și deserializarea (citirea) pot fi realizate cu ObjectInputStream clasă.
Să vedem un exemplu de serializare și deserializare.
Exemplu de serializare
Angajat.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(); } } }
Ieșire:
Data has been read from the file.
Exemplu de deserializare
Să deserializăm starea obiectului.
tutorial pyspark
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(); } } }
Ieșire:
1187345 Andrew
Interfață de la distanță
Interfață de la distanță este o interfață de marcare care îi aparține java.rmi pachet. Acesta marchează un obiect ca la distanță care poate fi accesat de pe o altă mașină (gazdă). Trebuie să implementăm interfața Remote dacă vrem să facem un obiect ca la distanță. Identifică interfețele ale căror metode pot fi invocate de la un JVM non-local. Orice obiect la distanță trebuie să implementeze interfața direct sau indirect.
Să definim o interfață la distanță și să o implementăm într-un program Java.
Definirea interfeței de la distanță
import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; }
Implementați interfața de la distanță
Există următoarele două moduri de a implementa interfața de la distanță:
- Prin extinderea clasei UnicastRemoteObject
- Prin utilizarea metodei exportObject() a clasei 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; }
Creați și porniți aplicația de la distanță
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); } } }
Creați și porniți aplicația client
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) { } } }
Interfață de marcare personalizată
În afară de interfața de marcare încorporată, Java ne permite, de asemenea, să creăm propria interfață de marcare. Să vedem un exemplu.
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(); } }
Ieșire:
Car is a vehicle. Yes, engine is working.