gpt4 book ai didi

java - 内部类内部静态 : serialVersionUID

转载 作者:行者123 更新时间:2023-11-30 05:58:00 26 4
gpt4 key购买 nike

我正在尝试开发我的个人图书馆类(class),但遇到了障碍。我的实用程序类包含静态方法和常量,以及用于各种数据结构和子实用程序的几个公共(public)内部类。这些类不是静态嵌套类,它们旨在被实例化、保存数据等。

这个问题就像我想让它序列化的任何数据类一样。这反过来意味着我想设置 serialVersionUID(即使我使用我自己的版本控制方法),这当然不能完成,因为你不能在内部类中有静态变量。

有解决办法吗?父类是否必须持有 UID(即使它实际上是静态的)。目前我开始考虑将我的 Utilities 类变成一组类,并放弃单一导入实用程序类的想法。不过,它正在变成越来越大的实用程序集。

K.Barad JDK1.6 u23

编辑:快速示例代码。

public class UtilDummy {
public static final Date version = new Date(111,01,04);

public static final int SUCCESS = 0;
public static final int READ_FAIL = -1;


public class TupleComp<E1 extends Serializable, E2 extends Serializable, E3 extends Serializable>
implements Cloneable, Serializable {
/** version : Date object for the version of this class */
public final Date version = new Date(111, 01, 04);
public E1 elem1 = null;
public E2 elem2 = null;
public E3 elem3 = null;

public TupleComp() {
}

public TupleComp(E1 elem1, E2 elem2, E3 elem3) {
this.elem1 = elem1;
this.elem2 = elem2;
this.elem3 = elem3;
}

@Override
public TupleComp<E1, E2, E3> clone() {
return new TupleComp<E1, E2, E3>(elem1, elem2, elem3);
}

public boolean equals(TupleComp<E1, E2, E3> target) {
boolean out = true;
out &= (elem1 == null ? target.elem1 == null : elem1.equals(target.elem1));
out &= (elem2 == null ? target.elem2 == null : elem1.equals(target.elem2));
out &= (elem3 == null ? target.elem3 == null : elem1.equals(target.elem3));
return out;
}

}
}

内部类抛出警告,一个相当相关的警告,但由于它不能采用静态字段,我无法添加 public static final long serialVersionUID

编辑:好的,所以一行像 public static final long ll = 1;很好。问题是我真正想做的是:public static final Date version = new Date(111, 01, 04);public static final long serialVersionUID = version.getTime();

这在顶级类中有效,但在内部类中出现:“字段版本不能声明为静态;静态字段只能在静态或顶级类型中声明”

日期对我来说是存储有意义的增量版本跟踪系统的最实用方法,该系统具有可比性并且可以分为主要部分和次要部分。有谁知道造成问题的日期对象是什么;

关闭:

我似乎对静态类的行为有一些误解,而这就是问题的解决方案。我可能(最终)会拆分类(class),但目前这是最明智的解决方案。感谢所有回答的人

最佳答案

这个

class MyClass {
class Inner {
static final int x = 1;
}
}

在我的 IDE (IntelliJ 9) 中看起来不错。然而,如果没有 final,它确实会提示。

由于 UUID 应该是常量,我想 final 应该适合您(事实上什至推荐)。

更新

将您的示例内部类复制到我的 IDE 中并向其添加 static final int 也完全没问题,编译器没有任何提示。

更新2

但是,将 final 限定符添加到 Date 对象确实会产生错误!你被证明是正确的:-)

但是当我尝试使用 String 时,没问题。这可能是因为基元和 String 是不可变的,而 Date 不是吗?

更新3

没有。 BigDecimal 也失败了。我没有理论:-(

更新4

Google is my friend :-) 结果是您需要声明您的内部类static,然后一切都很好而且花花公子:上面提到的所有静态字段都可以编译。从您显示的代码摘录来看,您的内部类似乎真的没有理由是非静态的,所以我想这个解决方案应该适合您。

关于java - 内部类内部静态 : serialVersionUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4896681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com