首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法绕过没有实现Serializable的类呢?

有没有办法绕过没有实现Serializable的类呢?
EN

Stack Overflow用户
提问于 2013-01-21 22:10:38
回答 1查看 291关注 0票数 1

好的,我在一个存储在文件中并从文件中重新加载的HashMap中使用了Bukkit的ItemStack,但是我发现ItemStack.serialize()创建的哈希图中使用的Bukkit并没有实现可序列化。有什么方法可以绕过这个问题吗?谢谢!

编辑:

这是我的插件中的一小段代码。它是引发错误的部分。

代码语言:javascript
运行
AI代码解释
复制
public void onEnable(
{
public Map<NewItem, List<ItemStack>> items = new HashMap<NewItem, List<ItemStack>>();
//Add content to items...
}
public void onDisable()
  {
      try
        {
          Map<List<Map<String, Object>>, NewItem> smap = new HashMap<List<Map<String, Object>>, NewItem>();
          for(NewItem item : items.keySet())
         {
              List<ItemStack> stacks = items.get(item);
                List<Map<String, Object>> stacks2 = new ArrayList<Map<String, Object>>();
              for(ItemStack stack : stacks)
              {
                  stacks2.add(stack.serialize());
                }
              smap.put(stacks2, item);
           }
          SaveLoadAPI.save(smap, this.getDataFolder().getPath()+"\\Items.data");
       }
      catch (Exception e)
        {
          getLogger().severe("Was unable to save the items file to the default path of: "+this.getDataFolder().getPath()+"\\Items.data");
            e.printStackTrace();
       }
  }

这里,最后但肯定是最不重要的,是错误!

代码语言:javascript
运行
AI代码解释
复制
16:08:52 [SEVERE] java.io.NotSerializableException: org.bukkit.craftbukkit.v1_4_
6.inventory.CraftMetaItem
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject0(Unknown Sourc
e)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject(Unknown Source
)
16:08:52 [SEVERE]       at java.util.HashMap.writeObject(Unknown Source)
16:08:52 [SEVERE]       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native M
ethod)
16:08:52 [SEVERE]       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown S
ource)
16:08:52 [SEVERE]       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unkno
wn Source)
16:08:52 [SEVERE]       at java.lang.reflect.Method.invoke(Unknown Source)
16:08:52 [SEVERE]       at java.io.ObjectStreamClass.invokeWriteObject(Unknown S
ource)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeSerialData(Unknown So
urce)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeOrdinaryObject(Unknow
n Source)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject0(Unknown Sourc
e)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject(Unknown Source
)
16:08:52 [SEVERE]       at java.util.ArrayList.writeObject(Unknown Source)
16:08:52 [SEVERE]       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native M
ethod)
16:08:52 [SEVERE]       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown S
ource)
16:08:52 [SEVERE]       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unkno
wn Source)
16:08:52 [SEVERE]       at java.lang.reflect.Method.invoke(Unknown Source)
16:08:52 [SEVERE]       at java.io.ObjectStreamClass.invokeWriteObject(Unknown S
ource)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeSerialData(Unknown So
urce)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeOrdinaryObject(Unknow
n Source)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject0(Unknown Sourc
e)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject(Unknown Source
)
16:08:52 [SEVERE]       at java.util.HashMap.writeObject(Unknown Source)
16:08:52 [SEVERE]       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native M
ethod)
16:08:52 [SEVERE]       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown S
ource)
16:08:52 [SEVERE]       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unkno
wn Source)
16:08:52 [SEVERE]       at java.lang.reflect.Method.invoke(Unknown Source)
16:08:52 [SEVERE]       at java.io.ObjectStreamClass.invokeWriteObject(Unknown S
ource)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeSerialData(Unknown So
urce)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeOrdinaryObject(Unknow
n Source)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject0(Unknown Sourc
e)
16:08:52 [SEVERE]       at java.io.ObjectOutputStream.writeObject(Unknown Source
)
16:08:52 [SEVERE]       at com.tommy3244.plugins.MakeYourOwnBlocks.SaveLoadAPI.s
ave(SaveLoadAPI.java:16)
16:08:52 [SEVERE]       at com.tommy3244.plugins.MakeYourOwnBlocks.MakeYourOwnBl
ocks.onDisable(MakeYourOwnBlocks.java:86)
16:08:52 [SEVERE]       at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlug
in.java:219)
16:08:52 [SEVERE]       at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin
(JavaPluginLoader.java:481)
16:08:52 [SEVERE]       at org.bukkit.plugin.SimplePluginManager.disablePlugin(S
implePluginManager.java:400)
16:08:52 [SEVERE]       at org.bukkit.plugin.SimplePluginManager.disablePlugins(
SimplePluginManager.java:393)
16:08:52 [SEVERE]       at org.bukkit.plugin.SimplePluginManager.clearPlugins(Si
mplePluginManager.java:434)
16:08:52 [SEVERE]       at org.bukkit.craftbukkit.v1_4_6.CraftServer.reload(Craf
tServer.java:563)
16:08:52 [SEVERE]       at org.bukkit.Bukkit.reload(Bukkit.java:184)
16:08:52 [SEVERE]       at org.bukkit.command.defaults.ReloadCommand.execute(Rel
oadCommand.java:23)
16:08:52 [SEVERE]       at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCo
mmandMap.java:186)
16:08:52 [SEVERE]       at org.bukkit.craftbukkit.v1_4_6.CraftServer.dispatchCom
mand(CraftServer.java:514)
16:08:52 [SEVERE]       at org.bukkit.craftbukkit.v1_4_6.CraftServer.dispatchSer
verCommand(CraftServer.java:506)
16:08:52 [SEVERE]       at net.minecraft.server.v1_4_6.DedicatedServer.al(Dedica
tedServer.java:260)
16:08:52 [SEVERE]       at net.minecraft.server.v1_4_6.DedicatedServer.r(Dedicat
edServer.java:225)
16:08:52 [SEVERE]       at net.minecraft.server.v1_4_6.MinecraftServer.q(Minecra
ftServer.java:494)
16:08:52 [SEVERE]       at net.minecraft.server.v1_4_6.MinecraftServer.run(Minec
raftServer.java:427)
16:08:52 [SEVERE]       at net.minecraft.server.v1_4_6.ThreadServerApplication.r
un(SourceFile:849)
EN

回答 1

Stack Overflow用户

发布于 2013-01-21 22:25:48

查看此post

如果您尝试扩展不可序列化的类,则继承的所有字段(以及私有字段)都不会被序列化。所以,不幸的是,扩展一个有很多字段的类不是一个好的选择。

如果对象org.bukkit.craftbukkit.v1_4_6.inventory.CraftMetaItem是一个字段,您可以将其标记为瞬态以避免序列化,如果这不能解决问题,您可以尝试实现write()和read()方法。有关更多信息,请查看API

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14448156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档