logo

Rozhranie značiek v jazyku Java

V tejto časti budeme diskutovať o rozhranie markerov v jazyku Java , jeho použitie, vstavané ( Serializovateľné , Klonovateľné a vzdialené rozhrania ) a vlastné rozhranie markerov s príkladmi.

Čo je rozhranie značky?

An rozhranie ktorý neobsahuje metódy, polia a konštanty je známy ako rozhranie markerov . Inými slovami, prázdne rozhranie je známe ako rozhranie markerov alebo rozhranie značky. Poskytuje informácie o type spustenia objektu. To je dôvod, prečo JVM a kompilátor majú ďalšie informácie o objekte. The Serializovateľné a Klonovateľné rozhrania sú príkladom rozhrania markerov. Stručne povedané, indikuje signál alebo príkaz pre JVM.

Vyhlásenie rozhrania markera je rovnaké ako rozhranie v jazyku Java, ale rozhranie musí byť prázdne. Napríklad:

 public interface Serializable { } 

Existujú dve alternatívy rozhrania markera, ktoré poskytuje rovnaký výsledok ako rozhranie markera.

    Interné vlajky:Môže sa použiť namiesto rozhrania značky na označenie akejkoľvek konkrétnej operácie.Anotácie:Od Java 5, rozhrania markerov sú vynechané . Namiesto rozhrania markerov poskytuje Java 5 anotácie dosiahnuť rovnaké výsledky. Umožňuje flexibilnú schopnosť metadát. Aplikovaním anotácií na akúkoľvek triedu teda môžeme vykonať špecifickú akciu.

Použitie rozhrania markerov

Rozhranie Marker sa používa ako značka, ktorá informuje kompilátor Java správou, aby mohol triede, ktorá ho implementuje, pridať nejaké špeciálne správanie. Rozhranie značiek Java je užitočné, ak máme informácie o triede a tieto informácie sa nikdy nemenia, v takýchto prípadoch používame rozhranie markerov reprezentovať to isté. Implementácia prázdneho rozhrania povie kompilátoru, aby vykonal nejaké operácie.

Používa sa na logické rozdelenie kódu a dobrý spôsob kategorizácie kódu. Je užitočnejší pri vývoji API a v frameworkoch ako Spring.

Vstavané rozhranie markerov

In Java , vstavané rozhrania markerov sú rozhrania, ktoré sú už prítomné v JDK a sú pripravené na použitie. Existuje mnoho vstavaných rozhraní značiek, niektoré z nich sú:

java xor
  • Klonovateľné rozhranie
  • Serializovateľné rozhranie
  • Vzdialené rozhranie

Poďme diskutovať jeden po druhom podrobne.

Klonovateľné rozhranie

Čistiteľné rozhranie v jazyku Java je tiež značka rozhrania, ktoré patrí java.lang balík. Vygeneruje repliku (kópiu) objektu s iným názvom. Rozhranie môžeme implementovať do triedy, ktorej triedny objekt sa má klonovať. Označuje to klon() metóda triedy Object. Ak v triede neimplementujeme rozhranie Cloneable a vyvoláme metódu clone(), vyvolá to ClassNotSupportedException.

Všimnite si, že trieda, ktorá implementuje rozhranie Cloneable, musí prepísať metódu clone() verejnou metódou. Pozrime sa na príklad.

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

Výkon:

 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 

Serializovateľné rozhranie

Je to značkovacie rozhranie v Jave, ktoré je definované v java.io balík. Ak chceme urobiť triedu serializovateľnou, musíme implementovať Serializovateľné rozhranie. Ak trieda implementuje rozhranie Serializable, môžeme serializovať alebo deserializovať stav objektu tejto triedy.

Serializácia (premena objektu na bajtový prúd) je mechanizmus, pri ktorom stav objektu sa načíta z pamäte a zapíše do súboru alebo databázy . Deserializácia (premena toku bajtov na objekt) je opakom serializácie, čo znamená čítanie stavu objektu zo súboru alebo databázy a zapísanie späť do pamäte sa nazýva deserializácia objektu.

Rozhranie značiek v jazyku Java

Serializáciu (zápis) je možné dosiahnuť pomocou ObjectOutputStream triedy a deserializáciu (čítanie) možno dosiahnuť pomocou ObjectInputStream trieda.

Pozrime sa na príklad serializácie a deserializácie.

Príklad serializácie

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

Výkon:

 Data has been read from the file. 

Príklad deserializácie

Poďme deserializovať stav objektu.

zákony ekvivalencie

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

Výkon:

 1187345 Andrew 

Vzdialené rozhranie

Vzdialené rozhranie je rozhranie markerov, ktoré patrí java.rmi balík. Označí objekt ako vzdialený, ku ktorému je možné pristupovať z iného počítača (hostiteľa). Ak chceme urobiť objekt ako vzdialený, musíme implementovať rozhranie Remote. Identifikuje rozhrania, ktorých metódy možno vyvolať z nemiestneho JVM. Akýkoľvek vzdialený objekt musí implementovať rozhranie priamo alebo nepriamo.

Definujme vzdialené rozhranie a implementujme ho do programu Java.

Definovanie vzdialeného rozhrania

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

Implementujte vzdialené rozhranie

Existujú dva spôsoby implementácie vzdialeného rozhrania:

  • Rozšírením triedy UnicastRemoteObject
  • Pomocou metódy exportObject() triedy 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; } 

Vytvorte a spustite vzdialenú aplikáciu

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

Vytvorte a spustite klientsku aplikáciu

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

Vlastné rozhranie značky

Okrem vstavaného rozhrania markerov nám Java umožňuje vytvárať vlastné rozhranie markerov. Pozrime sa na príklad.

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

Výkon:

 Car is a vehicle. Yes, engine is working.