Bu bölümde bu konuyu tartışacağız Java'da işaretleyici arayüzü , onun kullanımlar, yerleşik ( Serileştirilebilir , Klonlanabilir ve Uzak Arayüzler) Ve özel işaretleyici arayüzü örneklerle.
İşaretleyici arayüzü nedir?
Bir arayüz yöntemleri, alanları ve sabitleri içermeyen, işaretleyici arayüzü . Başka bir deyişle, boş bir arayüz olarak bilinir. işaretleyici arayüzü veya etiket arayüzü. Bir nesne hakkında çalışma zamanı türü bilgilerini iletir. Bunun nedeni de JVM ve derleyici bir nesne hakkında ek bilgiye sahiptir. Serileştirilebilir Ve Klonlanabilir arayüzler işaretleyici arayüze örnektir. Kısaca JVM'ye bir sinyal veya komutu belirtir.
İşaretleyici arayüzünün bildirimi Java'daki arayüzle aynıdır ancak arayüzün boş olması gerekir. Örneğin:
js genel değişkeni
public interface Serializable { }
İşaretleyici arayüzü ile aynı sonucu üreten iki alternatif işaretleyici arayüzü vardır.
Marker Arayüzünün Kullanım Alanları
İşaretleyici arayüzü, Java derleyicisini bir mesajla bilgilendiren ve kendisini uygulayan sınıfa bazı özel davranışlar ekleyebilmesini sağlayan bir etiket olarak kullanılır. Java işaretleyici arayüzü, sınıf hakkında bilgimiz varsa ve bu bilgiler asla değişmezse kullanışlıdır, bu gibi durumlarda, aynı şeyi temsil etmek için işaretleyici arayüz temsilini kullanırız. Boş bir arayüz uygulamak, derleyiciye bazı işlemleri yapmasını söyler.
Kodu mantıksal olarak bölmek için kullanılır ve kodu kategorilere ayırmanın iyi bir yoludur. API geliştirmek için ve Spring gibi çerçevelerde daha kullanışlıdır.
Dahili İşaretleyici Arayüzü
İçinde Java Yerleşik işaretleyici arayüzleri, JDK'da halihazırda mevcut olan ve kullanıma hazır arayüzlerdir. Pek çok yerleşik işaretleyici arayüzü vardır, bunlardan bazıları şunlardır:
- Klonlanabilir Arayüz
- Serileştirilebilir Arayüz
- Uzak Arayüz
Tek tek ayrıntılı olarak tartışalım.
Klonlanabilir Arayüz
Temizlenebilir arayüz Java'da aynı zamanda ait olan bir işaretleyici arayüzüdür. java.lang paket. Farklı addaki bir nesnenin kopyasını (kopyasını) oluşturur. Arayüzü hangi sınıf nesnesinin klonlanacağı sınıfta uygulayabiliriz. Şunu belirtir: klon() Object sınıfının yöntemi. Sınıfta Cloneable arayüzünü uygulamazsak ve clone() metodunu çağırırsak, ClassNotSupportedException.
Klonlanabilir arayüzü uygulayan bir sınıfın, clone() yöntemini genel bir yöntemle geçersiz kılması gerektiğini unutmayın. Bir örnek görelim.
Ürün.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(); } }
Çıktı:
javascript öğreticisi
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
Serileştirilebilir Arayüz
Java'da tanımlanan bir işaretleyici arayüzüdür. java.io paket. Eğer sınıfı serileştirilebilir hale getirmek istiyorsak, Serileştirilebilir arayüz. Bir sınıf Serileştirilebilir arayüzü uygularsa, o sınıfa ait bir nesnenin durumunu seri hale getirebilir veya seri durumdan çıkarabiliriz.
Serileştirme (bir nesnenin bayt akışına dönüştürülmesi) bir mekanizmadır. nesne durumu bellekten okunur ve bir dosyaya veya veritabanına yazılır . Seri durumdan çıkarma (bayt akışını bir nesneye dönüştürmek), serileştirmenin tersidir, şu anlama gelir: Bir dosyadan veya veritabanından nesne durumu okunup tekrar belleğe yazılıyor nesnenin seri durumdan çıkarılması denir.
Serileştirme (yazma) şu şekilde yapılabilir: NesneÇıktıAkışı sınıf ve seri durumdan çıkarma (okuma) şu şekilde gerçekleştirilebilir: Nesne Giriş Akışı sınıf.
Serileştirme ve seri durumdan çıkarma örneğini görelim.
Serileştirme Örneği
Çalışan.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; } }
SerileştirmeÖrneği.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(); } } }
Çıktı:
Data has been read from the file.
Seri durumdan çıkarma örneği
Nesne durumunu seri durumdan çıkaralım.
Seri durumdan çıkarmaExample.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(); } } }
Çıktı:
1187345 Andrew
Uzak Arayüz
Uzak arayüz ait bir işaretleyici arayüzüdür java.rmi paket. Bir nesneyi başka bir makineden (ana bilgisayar) erişilebilen uzak olarak işaretler. Bir nesneyi uzak yapmak istiyorsak Remote arayüzünü uygulamalıyız. Yerel olmayan bir JVM'den yöntemleri çağrılabilen arayüzleri tanımlar. Herhangi bir uzak nesnenin arayüzü doğrudan veya dolaylı olarak uygulaması gerekir.
Bir Remote arayüzü tanımlayalım ve onu bir Java programında uygulayalım.
Uzak arayüzü tanımlama
import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; }
Uzak Arayüzü Uygulama
Uzak arabirimi uygulamanın iki yolu vardır:
- UnicastRemoteObject sınıfını genişleterek
- UnicastRemoteObject sınıfının ExportObject() yöntemini kullanarak
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; }
Uzak Uygulamayı Oluşturun ve Başlatın
Sunucu.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); } } }
İstemci Uygulamasını Oluşturun ve Başlatın
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) { } } }
Özel İşaretleyici Arayüzü
Java, yerleşik işaretleyici arayüzünün yanı sıra, kendi işaretleyici arayüzünü oluşturmamıza da olanak tanır. Bir örnek görelim.
CustomMarkerInterfaceExample.java
javascript yazdırma
//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(); } }
Çıktı:
Car is a vehicle. Yes, engine is working.