2012-02-28 25 views
3

我最近去了一次Java面試,面試官問我一個我無法回答的問題。他問我如何創建一個類,它的實例可以被賦值給一個String,就像一個字符串一樣。請允許我解釋一下:像字符串一樣的任務

說我創建一個類MyClass並創建它的一個對象,說obj。作業應該是這樣的:

MyClass obj = "my Text"; 

我搜索了這類東西,但無法得到任何確切的答案。

回答

7

您說「分配給字符串」,但您的代碼示例顯示正在分配String值。這些是非常不同的事情。前者很簡單:只需在MyClass中編寫一個toString()方法即可。後者基本上是不可能的,因爲String是最後一堂課。

更多技術上相對於最後一點:如果你看一下rules for assignment conversion,一個String值只能分配給String類型的變量或一些更廣泛的引用類型。唯一較寬的參考類型是Object,CharSequence,SerializableComparable<String>。 (提示給Stephen C的帽子)。

+0

是的,我懷疑這就是他們的意思,儘管你從技術意義上來說並不是真的「將實例賦值給字符串」(部分原因是因爲這沒有技術意義......)。 – 2012-02-28 02:59:25

+2

*「唯一較寬的引用類型是Object。」* - 或「CharSequence」,「Comparable 」或「Serializable」。 – 2012-02-28 03:06:44

+0

@StephenC - 好。更新我的答案。 – 2012-02-28 04:15:26

0

我不認爲你想要做什麼是可能的。

表達"my Text"等同於效果new String("my Text")所以你你想要做的是:

MyClass obj = new String("my Text"); 

所以MyClass必須是java.lang.String一個子類,但String被聲明爲final這意味着子類明確禁止。

+1

_「我的文本」等同於新的字符串(「我的文本」)_ - 不完全。編譯時常量'「我的文本」'將被實現,而字符串表達式'新的字符串(「我的文本」)'不會是一個實際的字符串。 – 2012-02-28 04:19:25

相關問題