2016-07-28 4 views
-2

に文字列をキャストすることはできません。は</p> <pre><code>Test test = new Test(); String s = test.toString(); Test test1 = (Test)s; </code></pre> <p>任意の明確化がより参考になる、クラス名

+4

どのようにしてStringとTestオブジェクトを同時に作成できますか? – Blackbelt

+1

最初のケースでキャストする必要はありません: 'long b = a;'。これは単なる拡張変換であり、言語仕様で定義されています。 –

+0

最初の2行のボクシングとアンボクシングについて読む – Jens

答えて

3

キャスティングは実際に新しいオブジェクトを作成しません。

これは、タイプStringへの参照と考えています。しかし、私を信じて、それはタイプTestだと分かっています。

実際にはオブジェクトを変更するものではありません。

しかし、参照がStringのインスタンスにある場合、それはおそらくもTestのインスタンスへの参照することはできませんので、コンパイラはキャストを禁じ:TestStringのサブクラスではありません。

StringTestに変換するには、実際にTestというインスタンスを作成する必要があります。例えば、Stringを取るコンストラクタがあるかもしれません。その後:

Test test1 = new Test1(s); 

または多分静的ファクトリメソッドがあります:

Test test1 = Test1.buildFromString(s); 
0

TestStringの種類ではなく、キャストすることはできません。 toString()は、あるものを別のものに変換するメソッドです。 おそらく必要なのは、Stringを受け取り、提供されたデータに基づいてオブジェクトを構築するTestコンストラクタです。

関連する問題