Java 有没有办法绕过一个没有实现Serializable的类?

Java 有没有办法绕过一个没有实现Serializable的类?,java,serialization,plugins,minecraft,bukkit,Java,Serialization,Plugins,Minecraft,Bukkit,好的,我在一个HashMap中使用Bukkit的ItemStack,该HashMap存储在一个文件中并从中重新加载,但我发现在ItemStack.serialize()创建的哈希映射中使用的org.Bukkit.craftbukkit.v1_4_6.inventory.CraftMetaItem没有实现Serializable。有什么办法可以解决这个问题吗?谢谢 编辑: 下面是我插件中的一小段代码。这是引起错误的部分 public void onEnable({public Map<Ne

好的,我在一个HashMap中使用Bukkit的ItemStack,该HashMap存储在一个文件中并从中重新加载,但我发现在ItemStack.serialize()创建的哈希映射中使用的org.Bukkit.craftbukkit.v1_4_6.inventory.CraftMetaItem没有实现Serializable。有什么办法可以解决这个问题吗?谢谢

编辑:

下面是我插件中的一小段代码。这是引起错误的部分


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();
}
}

public void onEnable(
{
{
public Map items=new HashMap();
//向项添加内容……
}
public void onDisable()
{
{
尝试
{
Map smap=new HashMap();
for(NewItem item:items.keySet())
{
{
列表堆栈=items.get(item)
List stacks2=new ArrayList();
for(ItemStack stack:stacks)
{
stacks2.add(stack.serialize());
smap.put(stacks2,item);
SaveLoadAPI.save(smap,this.getDataFolder().getPath()+“\\Items.data”);
}
捕获(异常e)
{
getLogger().severe(“无法将项目文件保存到以下默认路径:“+this.getDataFolder().getPath()+”\\items.data”);
e.printStackTrace();
}
这里,最后但肯定是最不重要的,是错误


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)

16:08:52[严重]java.io.NotSerializableException:org.bukkit.craftbukkit.v1_4.
6.inventory.CraftMetaItem
16:08:52[严重]在java.io.ObjectOutputStream.writeObject0(未知源)在java.io.ObjectOutputStream.writeObject(未知源
)处
16:08:52[严重]sun.reflect.NativeMethodAccessorImpl.invoke0(Native M
ethod)sun.reflect.NativeMethodAccessorImpl.invoke0(Native M
ethod)的java.util.HashMap.writeObject(未知源代码)
16:08:52(未知源代码)
sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源代码)java.lang.reflect.Method.invoke(未知源代码)上的invokeWriteObject(未知源代码)
(未知源代码)java.io.ObjectOutputStream.writeObject0(未知源代码)处的16:08:52[严重]
java.io.ObjectOutputStream.writeObject(未知源代码)处的16:08:52[严重]
java.util.ArrayList.writeObject(未知源代码)处的16:08:52[严重]sun.reflect.NativeMethodAccessorImpl.invoke0(本机M
方法)sun.reflect.NativeMethodAccessorImpl.invoke(未知S
源)sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)java.lang.reflect.Method.invoke(未知源)上
16:08:52[严重]java.io.ObjectStreamClass.invokeWriteObject(未知的S
源代码)的
16:08:52[严重]java.io.ObjectOutputStream.writeSerialData(未知的So
源代码)的
16:08:52[严重]java.io.ObjectOutputStream.writeOrdinaryObject(未知的
n源代码)
16:08:52[严重]在java.io.ObjectOutputStream.writeObject 0(未知源)在java.io.ObjectOutputStream.writeObject(未知源)在java.io.ObjectOutputStream.writeObject(未知源)在java.util.HashMap.writeObject(未知源)在java.util.HashMap.writeObject(未知源)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机M
方法)在16:08:52sun.reflect.NativeMethodAccessorImpl.invoke(未知S
Source)上的[SEVERE]在sun.reflect.DelegatingMethodAccessorImpl.invoke(Unkno
wn Source)上的[SEVERE]在java.lang.reflect.Method.invoke(未知源)上的[br/>16:08:52[SEVERE]在java.io.ObjectStreamClass.invokeWriteObject上(未知S
源代码)java.io.ObjectOutputStream.writeSerialData(未知So
源代码)
java.io.ObjectOutputStream.writeOrdinaryObject(未知源代码)
16:08:52[严重]java.io.ObjectOutputStream.writeSerialData(未知So
源代码)
16:08:52[严重]在java.io.ObjectOutputStream.writeObject(未知源代码
)中,com.tommy3244.plugins.MakeYourOwnBlocks.SaveLoadAPI.s中的
ave(SaveLoadAPI.java:16)在com.tommy3244.plugins.MakeYourOwnBlocks.MakeYourOwnBl中的
16:08:52[严重]在org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlug
in.java:219)在org.bukkit.plugin.java.JavaPluginLoader.disablePlugin
(JavaPluginLoader.java:481)在org.bukkit.plugin.SimplePluginManager.disablePlugin(S
implePluginManager.java:400)在16:08:52[严重]在org.bukkit.plugin.SimplePluginManager.disablePlugins(
SimplePluginManager.java:393)
16:08:52[严重]在org.bukkit.plugin.SimplePluginManager.clearPlugins(Si
mplePluginManager.java:434)
16:08:52[严重]在org.bukkit.craftbukit.v1\u 4\u 6.CraftServer.reload(craff
tServer.java:563)
16:08:52[严重]在org.bukkit.bukkit.reload(bukkit.java:184)在org.bukkit.command.defaults.ReloadCommand.execute(Rel
oadCommand.java:23)在org.bukkit.command.simplecommmandmap.dispatch(SimpleCo
mmandMap.java:186)在org.bukkit.command.command.simplecommand.dispatch上执行(Rel
16:08:52[严重]在org.bukkit.craftbukkit.v1_4_6.CraftServer.dispatchCom
mand(CraftServer.java:514)
16:08:52[严重]在org.bukkit.craftbukkit.v1_4_6.CraftServer.dispatchSer
verCommand(CraftServer.java:506)
1