toString()
メソッドを使用して、クラスオブジェクトを文字列に格納しています。次に、文字列をそのクラスオブジェクトに変換します。
どうやってするか?ソースコードを手伝ってください。
ToString()メソッドを使用して、クラスオブジェクトを文字列に格納しています。次に、文字列をそのクラスオブジェクトに変換します。
あなたの質問はあいまいです。それは少なくとも2つの異なることを意味する可能性があり、その1つは...まあ...あなたの重大な誤解です。
これをした場合:
_SomeClass object = ...
String s = object.toString();
_
その答えは、s
をSomeClass
のインスタンスに戻す簡単な方法はないということです。 toString()
メソッドがそれらのファンキーな "SomeClass @ xxxxxxxx"文字列の1つを与えたとしても、あなたはそれをすることができませんでした。 (この文字列は、オブジェクトの状態、またはオブジェクトへの参照さえもエンコードしません。xxxxxxxx部分は、オブジェクトのidentity hashcodeです。一意であり、オブジェクトへの参照に魔法のように戻すことはできません。)
toString
の出力をオブジェクトに戻す唯一の方法は次のとおりです。
SomeClass.toString()
メソッドをコーディングして、オブジェクトに関連するすべての状態を、生成されたStringに含めます。toString()
メソッドによって生成された形式でStringを明示的に解析したコンストラクターまたはファクトリーメソッドをコーディングします。これはおそらく悪いアプローチです。確かに、非自明なクラスに対してこれを行うのは大変な作業です。
このようなことをした場合:
_SomeClass object = ...
Class c = object.getClass();
String cn = c.toString();
_
次のように同じClass
オブジェクト(つまり、c
にあるオブジェクト)を取得できます。
_Class c2 = Class.forName(cn);
_
これによりClass
が得られますが、それを使用して元のインスタンスを再構築する魔法の方法はありません。 (明らかに、クラスの名前にはオブジェクトの状態が含まれていません。)
任意のオブジェクトをシリアライズ/デシリアライズする方法を探している場合without自分でunparse/parseメソッドをコーディングする努力をするなら、あなたは- すべきではないtoString()
メソッドを使用している。使用できるいくつかの選択肢があります。
これらのアプローチにはそれぞれ長所と短所があります...ここでは触れません。
はるかに簡単な方法:ストリーミングのためにオブジェクトをjson文字列に変換するにはcom.google.gson.Gsonが必要です
以下のコード用のストリーミング用にオブジェクトをJSON文字列に変換する
Gson gson = new Gson();
String jsonString = gson.toJson(MyObject);
Json文字列をオブジェクトに戻すには、次のコードを使用します。
Gson gson = new Gson();
MyObject = gson.fromJson(decodedString , MyObjectClass.class);
ストリーミングのためにオブジェクトを変換し、反対側で読み取るはるかに簡単な方法。お役に立てれば。 -ヴィシュシュ
Class.forName(nameString).newInstance();
ToString()メソッドを使用して、クラスオブジェクトを文字列に格納しています。次に、文字列をそのクラスオブジェクトに変換します。
最初に、質問を理解している場合は、オブジェクトを文字列に保存し、後でそれを再度読み取ってオブジェクトを再作成できるようにします。
個人的に、それをする必要があるときは、ObjectOutputStreamを使用します。ただし、必須条件があります。 Stringに変換してからObjectに戻すオブジェクトは、Serializableオブジェクトであり、そのすべての属性である必要があります。
操作するオブジェクトであるReadWriteObject
とマニピュレーターであるReadWriteTest
を考えてみましょう。
ここに私がそれをする方法があります:
public class ReadWriteObject implements Serializable {
/** Serial Version UID */
private static final long serialVersionUID = 8008750006656191706L;
private int age;
private String firstName;
private String lastName;
/**
* @param age
* @param firstName
* @param lastName
*/
public ReadWriteObject(int age, String firstName, String lastName) {
super();
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
}
/*
* (non-Javadoc)
*
* @see Java.lang.Object#toString()
*/
@Override
public String toString() {
return "ReadWriteObject [age=" + age + ", firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
public class ReadWriteTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// Create Object to write and then to read
// This object must be Serializable, and all its subobjects as well
ReadWriteObject inputObject = new ReadWriteObject(18, "John", "Doe");
// Read Write Object test
// Write Object into a Byte Array
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(inputObject);
byte[] rawData = baos.toByteArray();
String rawString = new String(rawData);
System.out.println(rawString);
// Read Object from the Byte Array
byte[] byteArrayFromString = rawString.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArrayFromString);
ObjectInputStream ois = new ObjectInputStream(bais);
Object outputObject = ois.readObject();
System.out.println(outputObject);
}
}
標準出力はそれに似ています(実際、コピー/貼り付けはできません):
¬í ?sr ?*com.ajoumady.stackoverflow.ReadWriteObjecto$˲é¦LÚ ?I ?ageL ?firstNamet ?Ljava/lang/String;L ?lastNameq ~ ?xp ?t ?John ?Doe
ReadWriteObject [age=18, firstName=John, lastName=Doe]
あなたはjsonでそれをしたいかもしれません。
Bean(*)をjsonに変換してから元に戻します。
このプロセスは、シリアライゼーションおよびデシリアライゼーションとして知られています
それについて読む こちら
(*)データソースとしてメンバーだけを使用しないでください。オブジェクトの各メンバーのゲッターとセッターを作成してください。
他の人が述べたように、あなたの質問はせいぜいあいまいです。問題は、オブジェクトを文字列として表現し、その文字列からオブジェクトを再構築できるようにすることです。
ただし、Javaの多くのオブジェクトタイプには文字列表現がありますが、これはオブジェクトが文字列表現から構築できることを保証するものではありません。
このソース を引用するには、
オブジェクトのシリアル化とは、オブジェクトの状態を一連のバイトに保存するプロセス、および将来のある時点でそれらのバイトをライブオブジェクトに再構築するプロセスです。
ですから、あなたが望むのは不可能かもしれません。ただし、オブジェクトの状態をバイトシーケンスに保存し、そのバイトシーケンスから再構築することは可能です。
私のコメントを続けます。 toString
は解決策ではありません。 Javaでオブジェクトをシリアライズおよびデシリアライズするためのコード全体を書いた人がいます。こちらをご覧ください: http://www.javabeginner.com/uncategorized/Java-serialization
推奨読書:
ToString()を使用してクラスオブジェクトを文字列に格納することはできません。toString()はオブジェクトの文字列表現のみを返します。 Serialization について読んでみてください。
次のステートメントを使用できます。
Class c = s.getClass();
クラスインスタンスを取得します。