logo

Marker sučelje u Javi

U ovom odjeljku raspravljat ćemo o marker sučelje u Javi , njegovo koristi, ugrađeni ( Serializable , Može se klonirati , i udaljena sučelja ) i prilagođeno sučelje markera s primjerima.

Što je marker sučelje?

An sučelje koji ne sadrži metode, polja i konstante poznat je kao marker sučelje . Drugim riječima, prazno sučelje je poznato kao marker sučelje ili sučelje oznake. Isporučuje informacije o vrsti vremena izvođenja o objektu. To je razlog zašto je JVM i kompajler imaju dodatne informacije o objektu. The Serializable i Može se klonirati sučelja su primjer marker sučelja. Ukratko, označava signal ili naredbu JVM-u.

Deklaracija sučelja markera je ista kao sučelje u Javi, ali sučelje mora biti prazno. Na primjer:

 public interface Serializable { } 

Postoje dvije alternative sučelja markera koje proizvode isti rezultat kao i sučelje markera.

    Interne zastavice:Može se koristiti umjesto sučelja markera za označavanje bilo koje specifične operacije.Bilješke:Od Jave 5, sučelja markera su izostavljena . Umjesto marker sučelja, Java 5 nudi primjedbe za postizanje istih rezultata. Omogućuje fleksibilne mogućnosti metapodataka. Stoga, primjenom primjedbi na bilo koju klasu, možemo izvesti određene radnje.

Upotreba sučelja markera

Sučelje markera koristi se kao oznaka koja informira Java kompilator porukom tako da može dodati neko posebno ponašanje klasi koja ga implementira. Java marker sučelje je korisno ako imamo informacije o klasi i te informacije se nikada ne mijenjaju, u takvim slučajevima, koristimo marker sučelje reprezent za predstavljanje istog. Implementacija praznog sučelja govori prevoditelju da izvrši neke operacije.

Koristi se za logičnu podjelu koda i dobar je način za kategorizaciju koda. Korisniji je za razvoj API-ja iu okvirima kao što je Spring.

Ugrađeno sučelje markera

U Java , ugrađena markerska sučelja su sučelja koja su već prisutna u JDK-u i spremna za korištenje. Postoji mnogo ugrađenih sučelja markera, neka od njih su:

  • Sučelje koje se može klonirati
  • Sučelje koje se može serijalizirati
  • Udaljeno sučelje

Raspravljajmo jedan po jedan u detalje.

Sučelje koje se može klonirati

Sučelje koje se može čistiti u Javi je također marker sučelje koje pripada java.lang paket. Generira repliku (kopiju) objekta s drugim imenom. Možemo implementirati sučelje u klasi čiji objekt klase treba klonirati. To ukazuje na klon() metoda klase Object. Ako ne implementiramo sučelje Cloneable u klasi i pozovemo metodu clone(), ona izbacuje ClassNotSupportedException.

niz sadrži Javu

Imajte na umu da klasa koja implementira sučelje Cloneable mora nadjačati metodu clone() javnom metodom. Pogledajmo primjer.

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

Izlaz:

 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 

Sučelje koje se može serijalizirati

To je sučelje markera u Javi koje je definirano u java.io paket. Ako želimo učiniti klasu koja se može serijalizirati, moramo implementirati Serializable sučelje. Ako klasa implementira Serializable sučelje, možemo serijalizirati ili deserijalizirati stanje objekta te klase.

Serijalizacija (pretvaranje objekta u tok bajtova) je mehanizam u kojem stanje objekta se čita iz memorije i zapisuje u datoteku ili bazu podataka . Deserijalizacija (pretvaranje toka bajtova u objekt) je suprotno od serijalizacije znači da čitanje stanja objekta iz datoteke ili baze podataka i zapisivanje natrag u memoriju naziva se deserijalizacija objekta.

Marker sučelje u Javi

Serijalizacija (pisanje) može se postići s ObjectOutputStream klasa i deserijalizacija (čitanje) može se postići pomoću ObjectInputStream razreda.

Pogledajmo primjer serijalizacije i deserijalizacije.

Primjer serijalizacije

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

Izlaz:

 Data has been read from the file. 

Primjer deserijalizacije

Deserijalizirajmo stanje objekta.

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

Izlaz:

 1187345 Andrew 

Udaljeno sučelje

Udaljeno sučelje je marker sučelje koje pripada java.rmi paket. Označava objekt kao udaljeni kojem se može pristupiti s drugog stroja (domaćina). Moramo implementirati Remote sučelje ako želimo objekt učiniti udaljenim. Identificira sučelja čije se metode mogu pozvati iz ne-lokalnog JVM-a. Svaki udaljeni objekt mora implementirati sučelje izravno ili neizravno.

Definirajmo Remote sučelje i implementirajmo ga u Java program.

Definiranje udaljenog sučelja

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

Implementirajte udaljeno sučelje

Postoje sljedeća dva načina za implementaciju Remote sučelja:

  • Proširenjem klase UnicastRemoteObject
  • Korištenjem metode exportObject() klase 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; } 

Stvorite i pokrenite udaljenu aplikaciju

Poslužitelj.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); } } } 

Stvorite i pokrenite aplikaciju klijenta

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

Prilagođeno sučelje markera

Osim ugrađenog sučelja markera, Java nam također omogućuje stvaranje vlastitog sučelja markera. Pogledajmo primjer.

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

Izlaz:

 Car is a vehicle. Yes, engine is working.