logo

Interface do marcador em Java

Nesta seção, discutiremos sobre interface de marcador em Java , isso é usa, integrado ( Serializável , Clonável e interfaces remotas) e interface de marcador personalizada com exemplos.

O que é interface de marcador?

Um interface que não contém métodos, campos e constantes é conhecido como interface de marcador . Em outras palavras, uma interface vazia é conhecida como interface de marcador ou interface de tags. Ele fornece informações do tipo de tempo de execução sobre um objeto. É a razão pela qual JVM e o compilador possuem informações adicionais sobre um objeto. O Serializável e Clonável interfaces são o exemplo de interface de marcador. Resumindo, indica um sinal ou comando para a JVM.

A declaração da interface do marcador é a mesma da interface em Java, mas a interface deve estar vazia. Por exemplo:

 public interface Serializable { } 

Existem duas alternativas de interface de marcador que produzem o mesmo resultado que a interface de marcador.

    Sinalizadores internos:Pode ser usado no lugar da interface do marcador para indicar qualquer operação específica.Anotações:Desde Java 5, interfaces de marcadores são omitidas . Em vez da interface de marcador, Java 5 fornece o anotações para alcançar os mesmos resultados. Ele permite capacidade flexível de metadados. Portanto, ao aplicar anotações a qualquer classe, podemos realizar ações específicas.

Usos da interface do marcador

A interface do marcador é usada como uma tag que informa o compilador Java por meio de uma mensagem para que ele possa adicionar algum comportamento especial à classe que o implementa. As interfaces de marcadores Java são úteis se tivermos informações sobre a classe e essas informações nunca mudam, nesses casos, usamos a interface de marcadores representa para representar a mesma. A implementação de uma interface vazia diz ao compilador para realizar algumas operações.

É usado para dividir logicamente o código e é uma boa maneira de categorizar o código. É mais útil para desenvolver APIs e em frameworks como Spring.

Interface de marcador integrada

Em Java , as interfaces de marcador integradas são as interfaces que já estão presentes no JDK e prontas para uso. Existem muitas interfaces de marcadores integradas, algumas delas são:

  • Interface clonável
  • Interface serializável
  • Interface Remota

Vamos discutir um por um em detalhes.

Interface clonável

Interface limpável em Java também é uma interface de marcador que pertence a java.lang pacote. Gera réplica (cópia) de um objeto com nome diferente. Podemos implementar a interface na classe do objeto de classe a ser clonado. Ele indica o clone() método da classe Object. Se não implementarmos a interface Cloneable na classe e invocarmos o método clone(), ele lançará o ClassNotSupportedException.

Observe que uma classe que implementa a interface Cloneable deve substituir o método clone() por um método público. Vejamos um exemplo.

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

Saída:

 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 

Interface serializável

É uma interface de marcador em Java que é definida no java.io pacote. Se quisermos tornar a classe serializável, devemos implementar o Serializável interface. Se uma classe implementa a interface Serializable, podemos serializar ou desserializar o estado de um objeto dessa classe.

A serialização (conversão de um objeto em fluxo de bytes) é um mecanismo no qual o estado do objeto é lido da memória e gravado em um arquivo ou banco de dados . A desserialização (conversão do fluxo de bytes em um objeto) é o oposto da serialização, significa que leitura do estado do objeto de um arquivo ou banco de dados e escrita de volta na memória é chamado de desserialização do objeto.

Interface do marcador em Java

A serialização (escrita) pode ser alcançada com o ObjectOutputStream classe e desserialização (leitura) podem ser alcançadas com o ObjectInputStream aula.

Vamos ver um exemplo de serialização e desserialização.

Exemplo de serialização

Funcionário.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

atriz de cinema rekha
 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(); } } } 

Saída:

 Data has been read from the file. 

Exemplo de desserialização

Vamos desserializar o estado do objeto.

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

Saída:

 1187345 Andrew 

Interface Remota

Interface remota é uma interface de marcador que pertence a java.rmi pacote. Marca um objeto como remoto que pode ser acessado de outra máquina (host). Devemos implementar a interface Remote se quisermos tornar um objeto remoto. Identifica as interfaces cujos métodos podem ser invocados a partir de uma JVM não local. Qualquer objeto remoto deve implementar a interface direta ou indiretamente.

Vamos definir uma interface remota e implementá-la em um programa Java.

Definindo interface remota

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

Implementar a interface remota

Existem duas maneiras de implementar a interface remota:

  • Estendendo a classe UnicastRemoteObject
  • Usando o método exportObject() da classe 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; } 

Crie e inicie o aplicativo remoto

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

Crie e inicie o aplicativo cliente

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

Interface de marcador personalizado

Além da interface de marcador integrada, Java também nos permite criar sua própria interface de marcador. Vejamos um exemplo.

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

Saída:

 Car is a vehicle. Yes, engine is working.