Java での Transient
このチュートリアルでは、transient
キーワードとは何か、および Java のアプリケーションでそれを使用する方法を紹介します。
transient
は、変数をシリアル化不可としてマークするために使用される Java のキーワードです。オブジェクトをシリアル化するときに使用されます。
シリアル化は、Java オブジェクトをバイトのストリームに変換するプロセスです。したがって、ファイルに永続化することができ、フィールドがファイルに永続化するのを避けたい場合は、その一時的なものとしてマークを付けます。
一時的なメソッドをマークすることはできませんが、フィールドのみをマークします。いくつかの例で理解しましょう。
クラスをシリアライズ可能にするには、最初に Seriablizable
インターフェースを実装してから、変数で transient キーワードを使用する必要があります。以下は、Serializable
インターフェースを実装するシリアライズ可能なクラスの例です。ただし、フィールドトランジェントはマークされません。
class Student implements Serializable {
/*
* non- transient fields
*/
int id;
String name;
String email;
}
Java で transient
変数を作成する
この例では、Serializable
インターフェースを実装し、電子メールを一時的なものとしてマークするクラス Student
があります。したがって、その状態をファイルに書き込む場合、name
と id
のみがファイルに書き込まれます。メール
データは書き込まれません。同じファイルを読み取り、データをコンソールに表示することで、それを確認できます。以下の例を参照してください。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SimpleTesting {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Student student = new Student();
student.setId(10);
student.setName("Rohan");
student.setEmail("rohan@gmail.com");
// Writing to a file
FileOutputStream fileStream = new FileOutputStream("student.txt");
ObjectOutputStream outStream = new ObjectOutputStream(fileStream);
outStream.writeObject(student);
outStream.flush();
outStream.close();
fileStream.close();
// Reading file
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("student.txt"));
student = (Student) inputStream.readObject();
System.out.println(student.id + " " + student.name + " " + student.email);
System.out.println(Student.getSerialversionuid());
inputStream.close();
}
}
class Student implements Serializable {
private static final long serialVersionUID = 1L;
int id;
String name;
transient String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
出力:
10 Rohan null 1
電子メールが null であることが出力でわかります。
Java の Hibernate エンティティクラスで一時変数を作成する
hibernate を使用していて、一部の変数/フィールドを一時的にしたい場合は、@Transient
修飾子を使用します。データベーステーブルへのデータの書き込みをスキップします。このアノテーションは、休止状態で作業している場合にのみ役立ちます。これはアノテーションであるため、必要なすべての JAR をプロジェクトにインポートする必要があります。以下の例を参照してください。
@Entity
class Student implements Serializable {
@Id int id;
String name;
@Transient String email; // transient
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}