dzu*_*uma 5 java junit class instance serializable
我想知道Java Class是Serializable的实例.据我所知,只有在实现Serializable接口时,类才可序列化.我正在尝试使用junit生成实体类(来自某种模板)并检查它是否可序列化.
我生成的类(不实现Serializable)如下所示:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
测试如下:
File generatedFile = new File( GEN_OUTPUT_DIR, File.separator + className + ".java" );
assertTrue( generatedFile.getClass() instanceof Serializable ); //returns true
Run Code Online (Sandbox Code Playgroud)
结果表明我生成的类是Serializable的实例.我的问题是为什么?我认为如果它没有实现Serializable,它不应该是它的实例.我找了一个答案,但我找不到任何东西.
你做这个:
File generatedFile = new File(...);
Run Code Online (Sandbox Code Playgroud)
这创建了一个类的实例File.
generatedFile.getClass()
Run Code Online (Sandbox Code Playgroud)
这得到了Class对象的File对象,一个类型的对象Class<File>
所有已实现的接口:可序列化,可比较
如果你想实现它想要解析一个java源文件以查看它是否实现了Serializable,你应该为此获得一个合适的工具,构建相关文件的抽象语法树,并从那里提取信息.
或者你可以这样做,使用Class类的isAssignableFrom方法:
public boolean checkSerializable(Class<?> classToCheck) {
return Serializable.class.isAssignableFrom(classToCheck);
}
Run Code Online (Sandbox Code Playgroud)
然后查看课程本身:
boolean isSerializable = checkSerializable(MyTestTableDto.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4024 次 |
| 最近记录: |