本文介绍了当Java类是Serializable的实例时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道Java类何时是Serializable的实例.据我所知,类只有在实现Serializable接口时才可序列化.我正在尝试使用junit生成实体类(从某种模板),并检查它是否可序列化.

I wonder when Java Class is instance of Serializable. As I know class is serializable only if it implements Serializable interface. I'm trying to use junit to generate entity class (from some kind of template) and check if it is serializable.

我生成的类(不实现Serializable)看起来像:

My generated class (which does NOT implement Serializable) looks like:

package test;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.annotation.Generated;
import javax.persistence.Id;


@Entity
@Table( name = MyTestTableDto.TABLE_NAME )
public class MyTestTableDto 
{
    public static final String TABLE_NAME = "MY_TEST_TABLE";

    public static final String COLUMN_MY_ID_FIELD = "MY_ID_FIELD";
    public static final String FIELD_MY_ID_FIELD = "myIdField";

    @Id
    @Column( nullable = true, length = 14, name = COLUMN_MY_ID_FIELD )
    private Long myIdField;

    public Long getMyIdField()
    {
        return myIdField;
    }

    public void setMyIdField( Long aMyIdField )
    {
        this.myIdField = aMyIdField;
    }

}

测试如下:

 File generatedFile = new File( GEN_OUTPUT_DIR, File.separator + className + ".java" );

 assertTrue( generatedFile.getClass() instanceof Serializable ); //returns true

结果表明,我生成的类是Serializable的实例.我的问题是为什么?我认为,如果它不实现Serializable,则不应将其作为实例.我搜索了答案,但找不到任何东西.

The result suggest that my generated class is instance of Serializable. My question is why? I think if it does not implements Serializable it should not be instance of it. I searched for an answer but I couldnt find anything.

推荐答案

您要执行以下操作:

File generatedFile = new File(...);

这创建了一个类File实例.

generatedFile.getClass()

这得到了File对象的Class对象,该对象是Class<File>

This got the Class object for the File object, an object of type Class<File>

文件文档描述了课:

如果您想解析Java源文件以查看其是否实现了Serializable,则应该为此找到一个合适的工具,构建该文件的抽象语法树,并提取信息.从那里.

If you'd like to achieve that you want to parse a java source file to see if it implements Serializable, you should get an appropriate tool for this, build the abstract syntax tree of the file in question, and extract the information from there.

或者您也可以使用 isAssignableFrom 方法rel ="nofollow">课程课程:

Or you could just do it like this, using the isAssignableFrom method of the Class class:

public boolean checkSerializable(Class<?> classToCheck) {
    return Serializable.class.isAssignableFrom(classToCheck);
}

然后检查类本身:

boolean isSerializable = checkSerializable(MyTestTableDto.class);

这篇关于当Java类是Serializable的实例时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-22 03:15