我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,表明必须以特殊方式处理实现此接口的类的对象,如序列化,克隆等.
但最近我了解到它实际上与编译器或JVM无关.例如,在的情况下,Serializable接口的方法writeObject(Object)的ObjectOutputStream不喜欢的东西instanceOf Serializable,以检测类实现是否Serializable与抛出NotSerializableException相应.一切都在代码中处理,这似乎是一个设计模式,所以我认为我们可以定义自己的标记接口.
现在我怀疑了:
上面提到的标记接口的定义在第一点是错误的吗?那么我们如何定义Marker接口呢?
而不是使用instanceOf运算符为什么不能使方法类似于writeObject(Serializable)有一个编译时类型检查而不是运行时?
注释如何比标记接口更好?
我正在创建一个基于网格的游戏.
我需要实现一组在网格内随机定位的障碍.我创建了一个抽象类ALifeForm,它包含网格中每个项目的常用方法.显然,抽象类无法初始化,所以我打算创建一个新类AObstacle,它将扩展ALifeForm.
唯一的问题是,我的AObstacle班级不专业.它需要的所有方法都在其中ALifeForm.
我可以空课吗?这是不好的编程习惯吗?如果是这样,我可以实现什么呢?