java.io.InvalidClassException: com.kingmo.utils.abstractions.SerializableLocation;没有有效的构造函数,但我有合适的构造函数

时间:2021-04-14 17:06:33

标签: java serialization bukkit

我已经很困惑了。我让它正常工作,然后去做其他事情,然后又发现它不起作用。

现在我的代码是

package com.kingmo.utils.abstractions;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.Location;

public class SerializableLocation extends Location implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public SerializableLocation(Location loc) {
        super(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ());
    }

    public SerializableLocation(Map<String, Object> ser) {
        this(new Location(Bukkit.getWorld((String) ser.get("world")), (int) ser.get("x"), (int) ser.get("y"),
                (int) ser.get("z")));
    
        
    }

    @Override
    public Map<String, Object> serialize() {

        Map<String, Object> map = new HashMap<>();

        map.put("world", this.getWorld().getName());
        map.put("x", this.getBlockX());
        map.put("y", this.getBlockY());
        map.put("z", this.getBlockZ());
        return map;
    }

    @Override
    public int hashCode() {
        return 31 * (int) (this.getX() + this.getY() + this.getZ() + this.getWorld().getName().hashCode());
    }

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof SerializableLocation))
            return false;

        Location loc = (Location) o;
        
        return loc.getX() == this.getX() && loc.getY() == this.getY() && loc.getZ() == this.getZ()
                && loc.getWorld().getName().equals(this.getWorld().getName());
    }

}

如您所见,我有可序列化类所需的 SerializableLocation#init(Map ser)。但它仍然说我没有它。

1 个答案:

答案 0 :(得分:0)

您的类 SerializableLocation 实现了 Serializable 但它的父类 Location 没有实现。为了在这种情况下序列化工作,父类需要有一个无参数构造函数,但它没有。考虑到您谈到使用 Map<String, Object> 的必需构造函数,您很可能会混淆 SerializableConfigurationSerializable,因为后者需要,而前者不需要。

相关问题