我们知道可以创建标记界面。假设我想创建一个标记接口,例如Serializable接口。

如何强制JVM通知用户添加序列号ID,如Serializable接口那样?

我可以在文件处理或RMI调用中使用我们自己的标记器接口代替Serializable接口吗?

假设我的标记界面是

public interface SyncBean {}


如何使JVM需要添加serial版本ID来实现类?

最佳答案

它不是很漂亮,但似乎编译器警告特定于Serializable。如您所见,here中,Serializable上没有特殊的注释或任何使它按其行为方式进行的行为-该行为被硬编码为javac

您可以做的(仍然使用界面)是这样的:

public interface SyncBean {
    long getVersionID();
}


实现看起来像这样:

public class MySyncable {
    long getVersionID() { return 142L; }
}


您可以在Java 8中创建这些static



另一个(更好)的选择是使用注释:

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface SyncBean {
    public long versionID();
}


实现看起来像这样:

@SyncBean(142L)
public class MySyncable {
}


访问看起来像这样:

MySyncable.class.getAnnotation(SyncBean.class).versionID();

关于java - 在实现Serializable接口(interface)时,JVM如何发出警告以添加串行版本ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35884715/

10-14 05:42