它是一个空接口(没有字段或方法)。标记接口的示例有可序列化、可克隆和远程接口。所有这些接口都是空接口。
public interface Serializable { // nothing here }
实时应用程序中使用的标记接口示例:
- 可克隆的接口:java.lang 包中存在可克隆接口。有一个方法clone()Object类。实现 Cloneable 接口的类表明 clone() 方法创建该类实例的 field-for-field 副本是合法的。
在未实现 Cloneable 接口的类实例上调用 Object 的克隆方法会导致抛出异常 CloneNotSupportedException。按照约定,实现此接口的类应重写 Object.clone() 方法。
参考这里更多细节。 - 可串行化接口:可串行化接口存在于java.io包中。它用于使对象有资格将其状态保存到文件中。这就是所谓的序列化。
未实现此接口的类将不会对其任何状态进行序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。 - 远程接口:远程接口存在于java.rmi包中。远程对象是存储在一台机器上并从另一台机器访问的对象。因此,要使一个对象成为远程对象,我们需要使用 Remote 接口来标记它。这里,Remote接口用于标识其方法可以从非本地虚拟机调用的接口。任何作为远程对象的对象都必须直接或间接实现该接口。远程管理接口(远程方法调用)提供了一些远程对象实现可以扩展的便利类,以方便远程对象的创建。
Java
// Java program to illustrate Cloneable interface
import java.lang.Cloneable;
// By implementing Cloneable interface
// we make sure that instances of class A
// can be cloned.
class A implements Cloneable
{
int i;
String s;
// A class constructor
public A(int i,String s)
{
this.i = i;
this.s = s;
}
// Overriding clone() method
// by simply calling Object class
// clone() method.
@Override
protected Object clone()
throws CloneNotSupportedException
{
return super.clone();
}
}
public class Test
{
public static void main(String[] args)
throws CloneNotSupportedException
{
A a = new A(20, "GeeksForGeeks");
// cloning 'a' and holding
// new cloned object reference in b
// down-casting as clone() return type is Object
A b = (A)a.clone();
System.out.println(b.i);
System.out.println(b.s);
}
}
输出:
20 GeeksForGeeks
Java
// Java program to illustrate Serializable interface
import java.io.*;
// By implementing Serializable interface
// we make sure that state of instances of class A
// can be saved in a file.
class A implements Serializable
{
int i;
String s;
// A class constructor
public A(int i,String s)
{
this.i = i;
this.s = s;
}
}
public class Test
{
public static void main(String[] args)
throws IOException, ClassNotFoundException
{
A a = new A(20,"GeeksForGeeks");
// Serializing 'a'
FileOutputStream fos = new FileOutputStream("xyz.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(a);
// De-serializing 'a'
FileInputStream fis = new FileInputStream("xyz.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
A b = (A)ois.readObject();//down-casting object
System.out.println(b.i+" "+b.s);
// closing streams
oos.close();
ois.close();
}
}
输出:
20 GeeksForGeeks
相关用法
- Java Math abs()用法及代码示例
- Java Math acos()用法及代码示例
- Java Math addExact()用法及代码示例
- Java Math asin()用法及代码示例
- Java Math atan()用法及代码示例
- Java Math cos()用法及代码示例
- Java Math sin()用法及代码示例
- Java Math tan()用法及代码示例
- Java Math sinh()用法及代码示例
- Java Math cosh()用法及代码示例
- Java Math tanh()用法及代码示例
- Java Math sqrt()用法及代码示例
- Java Math cbrt()用法及代码示例
- Java Math pow()用法及代码示例
- Java Math subtractExact()用法及代码示例
- Java Math multiplyExact()用法及代码示例
- Java Math incrementExact()用法及代码示例
- Java Math decrementExact()用法及代码示例
- Java Math negateExact()用法及代码示例
- Java Math toIntExact()用法及代码示例
- Java Math min()用法及代码示例
- Java Math max()用法及代码示例
- Java Math ceil()用法及代码示例
- Java Math floor()用法及代码示例
- Java Math round()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Marker interface in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。