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