我创建了一个扩展Exception类的类,我在Eclipse上得到了这个警告
可序列化类PhoneAlreadyExists不声明long类型的静态最终serialVersionUID字段
如何删除它?
public class PhoneAlreadyExists extends Exception {
public PhoneAlreadyExists() {
// TODO Auto-generated constructor stub
super();
}
PhoneAlreadyExists(String message) {
super(message);
}
}
Run Code Online (Sandbox Code Playgroud) 有三种方法可以定义serialVersionUID:
1. private static final long serialVersionUID = 1L; (Default)
2. private static final long serialVersionUID = -8940196742313994740L; (Generated)
3. Don't define serialVersionUID and let the JVM define it at runtime. @Lance Java
Run Code Online (Sandbox Code Playgroud)
但我不明白第一种方式!
我已经看过了,有人为源代码中的所有java类定义了"serialVersionUID = 1L".
什么意思?这有用吗?
如果所有类都具有相同的serialVersionUID 1L,那么没有问题吗?
重复什么是serialVersionUID,我为什么要使用它?
现在使用Eclipse进行一些java工作.我的班级名称用黄色下划线标出.我可以抑制警告或只添加frickin序列ID.
我不关心任何一种方式(或者我应该?),但这个序列号究竟是什么?
谢谢
我刚刚开始使用AWT并在其中制作了一个简单的程序,它工作正常,但它在eclipse中显示了一条我不明白的警告信息:
可序列化类TestGUI不声明long类型的静态最终serialVersionUID字段
我知道警告消息与AWT无关,并且没有必要发布我的整个代码,但是当我试图制作代码的SSCCE时,警告也消失了.由于我不知道为什么会产生这个警告,所以我不知道在我的SSCCE中保留哪一部分.因此整个代码!
我的代码是:
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGUI extends Frame {
/**
* @param args
*/
private int x = 50;
private int y = 50;
TestGUI(String s) {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
setVisible(false);
System.exit(0);
}
});
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
x = me.getX();
y = me.getY();
repaint();
}
});
}
public void paint(Graphics g) {
g.drawString("Hello Princess", 100, 100);
g.drawString("Mouse …Run Code Online (Sandbox Code Playgroud) 我有一个对象如下:
public class Records implements java.io.Serializable{
private int cId;
private int pId;
private int vlaue;
private int tag;
public Records(int c, int p, int v, int t){
this.cId=c;
this.pId=p;
this.value=v;
this.tag=t;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经收集了大量数据,构建了上述类中的对象并将它们分解为磁盘.
我忘记包含在类文件中的一个转储是访问每个对象的值的方法.例如,访问特定对象的cId值.
我修改了类定义以添加这样的方法,但后来我无法将对象反序列化回记录类并获得此运行时错误:
java.io.InvalidClassException: Records; local class incompatible: stream classdesc serialVersionUID = -1232612718276774474, local class serialVersionUID = -8244963718951538904
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at DeSerialise.main(DeSerialise.java:21)
Run Code Online (Sandbox Code Playgroud)
我想我需要告诉java他们是相同的定义并修改serialVersionUID但不太确定如何?任何想法都会受到欢迎!
前提
由于我使用android studio 2.0(发行版),因此在编译我的应用程序时会得到许多内部类错误(这些似乎不相关,因为应用程序仍能正常工作).当我禁用即时运行时,我的应用程序工作正常,如果我启用它,应用程序崩溃
意见
编译时的错误如下:
Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
Error:(com.samsung.android.sdk.pass.e) that doesn't come with an
Error:associated EnclosingMethod attribute. This class was probably produced by a
Error:compiler that did not target the modern .class file format. The recommended
Error:solution is to recompile the class from source, using an up-to-date compiler
Error:and without specifying any "-target" type options. The consequence of ignoring
Error:this warning is that reflective operations on this class will incorrectly
Error:indicate that it …Run Code Online (Sandbox Code Playgroud) 我是一名学习我的文件IO技能的学生,我遇到了使用ObjectInputStream从文件中读取对象的问题.代码一直抛出一个InvalidClassException,我无法找到代码是如何在线投掷或通过反复试验.这是我的代码:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class ReadFromFile {
String filename;
List<Object> os;
public ReadFromFile(String filename) {
this.filename = filename;
os = new ArrayList<>();
}
public Object[] readObject() {
try {
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.print("reading\n");
while (true) {
os.add(ois.readObject());
System.out.print("read one\n");
}
} catch (EOFException e) {
return os.toArray();
} catch (FileNotFoundException e) {
System.out.print("File not found\n");
return os.toArray();
} catch (ClassNotFoundException e) {
System.out.print("Class not found\n");
return os.toArray();
} catch …Run Code Online (Sandbox Code Playgroud) 我正在尝试保存一个对象,我用Google搜索了HowTo并得到了关于这个问题的教程.然而,由于我以前从未使用过这个问题,我遇到了无法解决的问题.
所以我有一个庞大的类Course(包含所有类型的东西,变量,收集器......),我试图将其保存在文件中.
import java.io.Serializable;
class Person implements Serializable {
... }
Run Code Online (Sandbox Code Playgroud)
现在,我将一个对象发送到类Save.java并尝试保存它:
class Save {
protected void saveCourse (Course course) {
FileOutputStream courseFile = new FileOutputStream("course.data");
ObjectOutputStream courseObj = new ObjectOutputStream(courseFile);
courseObj.writeObject(course);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,FileOutputStream和ObjectOutputStream"无法解析为类型".不是他们认为是预定义的.我怎样才能解决这个问题
我可以在这里找到我得到的教程.
我正在创建一个Java应用程序,当创建一个与ADT一起使用的接口时,它会发现需要将随机数初始化为ID号.
public class StackFullException extends RuntimeException {
private static final long serialVersionUID = 1L;
public StackFullException(){}
public StackFullException(String message) {
super(message);
}
}
Run Code Online (Sandbox Code Playgroud)
我很好奇是否将其删除将影响我的程序的任何后果,如果是这样,如何避免它.
对于我的一个项目,我需要定义一个扩展的新异常ProviderMismatchException.
从javadoc链接中,您可以看到此异常:
IllegalArgumentException,哪个RuntimeException,哪个Exception,哪个Throwable.所有这些都定义了自己的,static final serialVersionUID除了Throwable添加private修饰符.
现在,如果你实现了一个接口Foo,那么所有继承的classse也会实现该接口,这也代表Serializable着它; 但是,为什么JDK中的子类为每个子类重新定义它?没有为继承的类再次定义它的危险是什么?