2017-04-04 44 views
-3

是否可以將字符串文字分配給Java中的對象?
像這樣:MyClass obj =「String」在Java中可能嗎?

String strLiteral = "String value"; 
MyClass obj = "String"; // Is this possible 
+3

不,您不能指定用戶定義的轉換。 –

+0

有沒有試過嗎?它工作?你的錯誤是什麼? – Jpsh

+0

'String strLiteral =「String value」'是可能的,'MyClass obj =「String」'不起作用,因爲Jon Skeet已經聲明你不能指定用戶定義的轉換。你可以得到的最接近的就是'MyClass obj = new MyClass(「String」)'。 – Thomas

回答

3

你不是試圖把它分配給對象,你試圖把它分配給MyClass類型的變量。

如果String與該類分配兼容,則可以這樣做。例如:

Comparable c = "Foo"; 

是好的,因爲String是分配兼容Comparable,因爲String實現Comparable。該對象仍然是String,這只是我們通過Comparable類型的變量來訪問它。 (關於這個概念見What does it mean to 「program to an interface」?。)

你不能做:

class Foo { 
} 

// Doesn't work 
Foo f = "Foo"; 

因爲String不是分配兼容Foo

+0

謝謝,我怎樣才能創建自己的字符串像java中的類? –

+0

@NineeshCV:就像創建任何其他類一樣。但是有一些關於'String'的東西你不能重複:1.你不能爲Java添加新的文字形式,必須在規範級別(以及從它衍生出的所有級別)定義這些形式。 2.你不能爲你的課程重寫'+'。 –

-1

字符串是最終類您不能擴展字符串類,並且無法創建子類。所以你不能把一個字符串分配給不同的類名。

+4

作爲'final'的'String'是無關緊要的,無論如何你都不能將一個超類的引用賦給一個子類變量(沒有強制轉換)。 –

0

不,您不能,因爲MyClass不是String的超類。

一種選擇是讓你的類的靜態工廠方法fromString,並使用像這樣:

MyClass obj = MyClass.fromString("String"); 

在這種方法中,你可以定義從String轉換到MyClass

相關問題