Javaでtransientはどのような役割を果たしますか?
2824 ワード
Transientキーワードは、ドメインのシーケンス化を防止するために使用されます.参照タイプがtransientによって修飾されている場合、その逆シーケンス化の結果はnullです.基本タイプは0です.タイプを参照するときにシーケンス化できないクラスの場合は、逆シーケンス化時に直接スキップされるtransient修飾も使用します.
保存したくないドメインをtransientで修飾できます
次の例ではtransientで修飾されたnameを見ることができ,シーケンス化クローンを用いた後,逆シーケンス化の結果nullである.
保存したくないドメインをtransientで修飾できます
次の例ではtransientで修飾されたnameを見ることができ,シーケンス化クローンを用いた後,逆シーケンス化の結果nullである.
package com.lk.B;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Employee implements Cloneable,Serializable{
private static final long serialVersionUID = 1L;
private transient String name;
private int age;
public Employee(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuffer sb = new StringBuffer();
sb.append(" :"+name+",");
sb.append(" :"+age+"
");
return sb.toString();
}
@Override
protected Employee clone() {
// TODO Auto-generated method stub
Employee employss = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
try {
ObjectInputStream ois = new ObjectInputStream(bais);
employss = (Employee) ois.readObject();
ois.close();
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return employss;
}
}
package com.lk.B;
public class Test3 {
public static void main(String[] args) {
Employee emp = new Employee(" ", 21);
System.out.println(emp);
Employee emp1 = emp.clone();
System.out.println(emp1);
}
}
: , :21
:null, :21