Ebben a részben arról fogunk beszélni marker interfész Java nyelven , annak használ, beépített ( Sorozatozható , Klónozható és távoli interfészek ) és egyéni marker felület példákkal.
Mi az a marker interfész?
An felület amely nem tartalmaz metódusokat, mezőket és konstansokat, az úgynevezett marker interfész . Más szavakkal, az üres felületet ún marker interfész vagy címke felület. Futásidejű típusú információkat szolgáltat egy objektumról. Ez az oka annak, hogy a JVM és a fordító további információval rendelkezik egy objektumról. A Sorozatozható és Klónozható Az interfészek a marker interfész példája. Röviden: jelet vagy parancsot jelez a JVM-nek.
A marker interfész deklarációja megegyezik a Java interfészével, de az interfésznek üresnek kell lennie. Például:
public interface Serializable { }
A marker interfésznek két alternatívája van, amely ugyanazt az eredményt adja, mint a marker interfész.
A marker interfész használata
A Marker interfész címkeként használatos, amely egy üzenettel tájékoztatja a Java fordítót, hogy az valamilyen különleges viselkedést tudjon adni az azt megvalósító osztálynak. A Java marker interfész akkor hasznos, ha információval rendelkezünk az osztályról, és ezek az információk soha nem változnak, ilyenkor a marker interface reprezentációt használjuk, hogy ugyanazt ábrázoljuk. Az üres interfész megvalósítása néhány művelet elvégzésére utasítja a fordítót.
A kód logikai felosztására szolgál, és jó módszer a kód kategorizálására. Hasznosabb API-k fejlesztéséhez és olyan keretrendszerekhez, mint a Spring.
hogyan lehet a karakterláncot int-re változtatni
Beépített marker interfész
Ban ben Jáva , a beépített marker interfészek azok az interfészek, amelyek már jelen vannak a JDK-ban és használatra készek. Számos beépített marker interfész létezik, ezek közül néhány:
- Klónozható felület
- Sorosozható interfész
- Távoli interfész
Beszéljük meg egyenként részletesen.
Klónozható felület
Tisztítható felület a Java-ban is egy marker interfész, amelyhez tartozik java.lang csomag. Létrehoz egy más nevű objektum replikáját (másolatát). Az interfészt abban az osztályban tudjuk megvalósítani, hogy melyik osztályobjektumot klónozzuk. Jelzi a klón() az Object osztály metódusa. Ha nem valósítjuk meg a Cloneable felületet az osztályban, és meghívjuk a clone() metódust, akkor a ClassNotSupportedException.
Vegye figyelembe, hogy a klónozható felületet megvalósító osztálynak nyilvános metódussal kell felülírnia a clone() metódust. Lássunk egy példát.
Product.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(); } }
Kimenet:
lista java
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
Sorosozható interfész
Ez egy jelölőfelület a Java-ban, amely a java.io csomag. Ha az osztályt szerializálhatóvá akarjuk tenni, meg kell valósítanunk a Sorozatozható felület. Ha egy osztály megvalósítja a Serializable interfészt, akkor sorosozhatjuk vagy deszerializálhatjuk az adott osztály objektumának állapotát.
A szerializálás (egy objektum bájtfolyammá alakítása) egy olyan mechanizmus, amelyben Az objektum állapotát a rendszer kiolvassa a memóriából, és fájlba vagy adatbázisba írja . A deszerializáció (a bájtfolyam objektummá konvertálása) a szerializálás ellentéte azt jelenti az objektum állapotának kiolvasása fájlból vagy adatbázisból, és visszaírása a memóriába objektum deszerializációjának nevezzük.
A szerializálást (írást) a ObjectOutputStream osztály és deszerializáció (olvasás) érhető el azzal ObjectInputStream osztály.
Lássunk példát a szerializálásra és a deszerializálásra.
Példa a szerializálásra
Munkavállaló.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(); } } }
Kimenet:
Data has been read from the file.
Példa a deszerializációra
Deszerializáljuk az objektum állapotát.
DeserializationExample.java
1 millió hány 0
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(); } } }
Kimenet:
1187345 Andrew
Távoli interfész
Távoli interfész egy marker interfész, amelyhez tartozik java.rmi csomag. Távoliként jelöl meg egy objektumot, amely egy másik gépről (gazdagépről) elérhető. Meg kell valósítanunk a Remote interfészt, ha egy objektumot távolivá akarunk tenni. Azonosítja azokat az interfészeket, amelyek metódusai meghívhatók egy nem helyi JVM-ről. Minden távoli objektumnak közvetlenül vagy közvetve meg kell valósítania az interfészt.
Definiáljunk egy távoli felületet, és implementáljuk egy Java programban.
Távoli interfész meghatározása
import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; }
Valósítsa meg a távoli interfészt
A távoli felület megvalósításának két módja van:
- Az UnicastRemoteObject osztály kiterjesztésével
- Az UnicastRemoteObject osztály exportObject() metódusával
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; }
Hozzon létre és indítsa el a távoli alkalmazást
Server.java
sql adattípusok
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); } } }
Hozzon létre és indítsa el az ügyfélalkalmazást
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) { } } }
Egyedi marker interfész
A beépített marker interfészen kívül a Java saját marker interfész létrehozását is lehetővé teszi. Lássunk egy példát.
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(); } }
Kimenet:
Car is a vehicle. Yes, engine is working.