序列化静态内部类java

rnmwe5a2  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(98)

我现在正在用Java做一个游戏,我现在计划如何处理NPC,让每个NPC成为他们自己独特的类的示例,所有这些都继承自一个抽象的NPC类。
例如,如果我有一个名为“Michael”的角色,Michael将是Michael类的一个示例,该示例将从NPC继承。
当我设置这个时,我突然想到,也许我可以在NPC类的主体中将所有NPC类定义为静态类,主要是因为这样我就只有NPC.java文件,而不是一堆Michael.java,John.java等。
这看起来像是

public abstract class NPC implements Seralizable {

   //stuff

   public static class Michael extends NPC {

      //more stuff

   } 

}

字符串
当我需要在游戏中创建一个Michael的示例时,它看起来像

NPC npc1 = NPC.Michael();


正如你在上面看到的,NPC实现了Seralizable,这样我就可以将游戏状态保存到一个文件中。目前我主要关心的是这些内部静态类是否会对序列化做任何有趣的事情,因为静态 * 字段 * 都是 transient 的。
我也希望大家能对这种代码组织方式提供反馈,如果人们通常只喜欢将类放在自己的文件中的话

k97glaaz

k97glaaz1#

静态内部类与顶级类在除命名方式之外的其他方面都是相同的。它们是否序列化完全独立于它们所在的类。以下各项之间没有任何区别:

--- Michael.java:

public class Michael extends Npc { ... }

--- Npc.java

public class Npc implements Serializable { .... }

字符串
和/或

---- Npc.java

public class Npc implements Serializable {
  public static class Michael extends Npc { .... }
}


如果Michael不包含任何自定义代码(只是继承自Npc,但没有定义任何不同的或新的代码),则Michael不应该是它自己的类。

相关问题