如何用Java编写我们自己的标记接口?

2022-09-02 05:09:10

我知道java中的标记接口。它用于定义有关类的特定行为。例如,可序列化接口具有将对象存储到字节流及其反向进程的特定功能。但我不知道这个特定行为是在哪里实现的,因为它没有任何方法。

  1. JVM 如何调用此特定行为?
  2. 如何编写我们自己的标记界面?您能给我一个简单的用户定义的标记界面供我理解吗?
  3. 是否可以在标记界面中使用方法?

请指导我解决此问题。


答案 1
  • JVM 如何调用此特定行为

ObjectOutputStream并将检查您的类是否实现 , 。如果是,它将继续,否则将抛出。ObjectInputStreamSerializableExternalizableNonSerializableException

  • 如何编写我们自己的标记界面

创建一个没有任何方法的接口,这就是您的标记接口。

样本

public interface IMarkerEntity {


}

如果实现此接口的任何类将被应用程序视为数据库实体。

示例代码:

public boolean save(Object object) throws InvalidEntityException {
   if(!(object instanceof IMarkerEntity)) {
       throw new InvalidEntityException("Invalid Entity Found, cannot proceed");
   } 
   database.save(object);
}
  • 这有可能在标记界面中使用方法吗?

标记接口模式的整个思想是提供一种表示“是的,我是某物”的意思,然后系统将继续使用默认过程,就像当你将类标记为Serialzable时,它只是告诉这个类可以转换为字节。


答案 2
  1. 序列化由 和 类处理。如果类具有特殊的序列化需求,则 API 中概述了要创建的方法。反射用于调用这些方法。ObjectInputStreamObjectOutputStream

  2. 就像你编写任何其他接口一样。

  3. 没有什么可以阻止您将方法放在标记界面中。

现在更常见的做法是使用注释来提供与元数据标记接口相同的元数据。