相关疑难解决方法(0)

如果扩展一个实现Serializable"下线"的类,为什么还需要重新定义serialVersionUID?

对于我的一个项目,我需要定义一个扩展的新异常ProviderMismatchException.

从javadoc链接中,您可以看到此异常:

  • 延伸IllegalArgumentException,哪个
  • 延伸RuntimeException,哪个
  • 延伸Exception,哪个
  • 延伸Throwable.

所有这些都定义了自己的,static final serialVersionUID除了Throwable添加private修饰符.

现在,如果你实现了一个接口Foo,那么所有继承的classse也会实现该接口,这也代表Serializable着它; 但是,为什么JDK中的子类为每个子类重新定义它?没有为继承的类再次定义它的危险是什么?

java inheritance serialization

5
推荐指数
1
解决办法
1287
查看次数

Java外部化serialVersionUID

如果我实现Externalized,我是否需要在该类中指定serialVersionUID以实现版本兼容性?

换句话说,Java 在反序列化Externalized 对象时是否检查serialVersionUID?

java serialversionuid

4
推荐指数
1
解决办法
2550
查看次数

序列化为JSON时可以忽略serialVersionUID吗?

基于Java的serialVersionUID问题,当序列化为JSON时是否有必要定义serialVersionUID?

private static final long serialVersionUID = 234239427349L;
Run Code Online (Sandbox Code Playgroud)

我理解当一个对象是二进制序列化(RPC等)时,框架会添加类元数据以了解它被序列化到哪个版本,如果它是错误的则拒绝.如果JSON没有任何串行版本字段(_v),那么这似乎没用.(虽然SONAR发出警告!)

java serialization mongodb

4
推荐指数
1
解决办法
1262
查看次数

Java SerialVersionUid是1L还好吗?还是需要独一无二的?

我有两个实现Serializable的java类.我将它们都设置为1L的serialVersionUid.

同事说所有类必须具有唯一的串行版本uid,并且如果jvm具有相同的串行版本uid,则jvm将把类视为相等.我认为相等是基于equals方法的结果而不是串行版本uid.

我的理解是,串行版本uid用于指示类的版本,并且当类以不兼容的方式更改时,串行版本的uid应该递增.

那是对的吗?是否可以使用1的serialversion uid?或者java类从来没有1L的serialversion uid?

java serialization serialversionuid

4
推荐指数
1
解决办法
1363
查看次数

为什么serialVersionUID字段存在?

它让我从Serializable界面的启动中感到困惑,为什么我必须在我的所有课程中加入这个领域.我知道这个接口需要一个唯一的标识符来标记类,但为什么它们不能在运行时生成它.例如,他们可以使用完全限定类名的MD5哈希或者用于处理罕见事件中的重复项的类似方法来生成它(也就是说,我确定,当被要求生成id时,eclipse会做什么).

所以我要问的是(这篇文章不仅仅是对标准库的咆哮)究竟是如何使用框架化序列化字段的?

我想知道的原因是因为我将尝试创建一个Aspect(使用AspectJ或其他语言),它将使用MD5哈希添加serialVersionUID字段,并且能够以API可接受的方式处理冲突.

如果我能让它发挥作用,我会发布结果.

java serializable serialversionuid aspects

3
推荐指数
1
解决办法
1906
查看次数

可序列化对象属性

当我Serializable在课堂上时,是否需要添加Serializable到班级中的所有对象?

例如,

public class User implements Serializable{

private List<Role> role;
private Task task;
}
Run Code Online (Sandbox Code Playgroud)

我是否需要添加SerializableRoleTask,太?

public class Task implements Serializable{
    // ...
}

public class Role implements Serializable{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

java serializable object-serialization

3
推荐指数
1
解决办法
2333
查看次数

否定serialVersionUID?

我遇到了一个异常处理程序类,它扩展了异常,如下所示:

public class AppFileReaderException extends Exception {
    //Explicit serialization UID added 
    private static final long serialVersionUID = -2458461415998318236L;

    public AppFileReaderException(String msg) 
    {
        super(msg);
    }
Run Code Online (Sandbox Code Playgroud)

作者使用了显式序列化版本UID,并在其他类似的异常处理程序类中忽略了它.基于我从另一篇SO帖子中理解的内容,如果应用程序没有使用任何序列化和反序列化,我们可以忽略序列化UID.奇怪的是,作者使用了否定的UID.我很想知道这是有效还是推荐的做法.有没有其他理由使用负序列版本的VID?

java serialization serialversionuid

3
推荐指数
1
解决办法
1961
查看次数

serialVersionId在序列化中的重要性?

每当我们尝试serialize一个Class的对象时,我们总是有一个唯一的值serialVersionId作为私有final字段,它的意义是什么deserialization,我们可以使用它来检查对象和值是否已经以适当的方式反序列化?

java

3
推荐指数
1
解决办法
286
查看次数

此代码如何引发NoWhenBranchMatchedException?

在我们最新的应用程序版本中,我们看到了一些kotlin.NoWhenBranchMatchedException报告给Fabric / Crashlytics的消息。

这是有问题的代码段:

private lateinit var welcome: Welcome

// ...

welcome.welcomeStateLoginStatus.let {
    val handled = when (it) {
        UnknownUser -> {
            btn_login.visibility = View.VISIBLE
            btn_logout.visibility = View.GONE

            secondButtonFocusedInfoText = getString(R.string.welcome_login_button_info)
            tv_user_description.text = null
        }
        is InternalUser -> {
            btn_login.visibility = View.GONE
            btn_logout.visibility = View.VISIBLE

            secondButtonFocusedInfoText = "Logout"
            tv_user_description.text = "Logged in as internal user"
        }
        ExternalUser -> {
            btn_login.visibility = View.GONE
            btn_logout.visibility = View.VISIBLE

            secondButtonFocusedInfoText = "Logout"
            tv_user_description.text = "Logged in as external user"
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

android kotlin sealed-class

3
推荐指数
1
解决办法
960
查看次数

查询Java序列化

在现有的新成员方法中添加新成员方法之后,我面临以下问题class Response implements Serializable{}.没有声明显式的串行版本ID.多次尝试,我得到相同的序列号.

Error communicating with the webserver: com.abc.xyz.app.util.common.Response;
local class incompatible: stream classdesc serialversionUID = 
-3900355805473150430, local class serialversionUID = 
-6706527232726476603
Run Code Online (Sandbox Code Playgroud)

经过一些文档后,我尝试修改class Response附加行:private final static long serialVersionUID = 1L;.

通过此更改,以下是错误:

Error communicating with the webserver: com.abc.xyz.app.util.common.Response;
local class incompatible: stream classdesc serialversionUID = 
-3900355805473150430, local class serialversionUID = 1
Run Code Online (Sandbox Code Playgroud)

这些是位于webappstomcat文件夹中并xyz.jnlp在客户端计算机上加载的类.xyz.jnlp从远程网络服务器加载新客户机.但事情不起作用!

请帮我理解这个问题.

java jnlp serialization deserialization

2
推荐指数
1
解决办法
573
查看次数