是否可以將字符串文字分配給Java中的對象?
像這樣:MyClass obj =「String」在Java中可能嗎?
String strLiteral = "String value";
MyClass obj = "String"; // Is this possible
是否可以將字符串文字分配給Java中的對象?
像這樣:MyClass obj =「String」在Java中可能嗎?
String strLiteral = "String value";
MyClass obj = "String"; // Is this possible
你不是試圖把它分配給對象,你試圖把它分配給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
。
謝謝,我怎樣才能創建自己的字符串像java中的類? –
@NineeshCV:就像創建任何其他類一樣。但是有一些關於'String'的東西你不能重複:1.你不能爲Java添加新的文字形式,必須在規範級別(以及從它衍生出的所有級別)定義這些形式。 2.你不能爲你的課程重寫'+'。 –
字符串是最終類您不能擴展字符串類,並且無法創建子類。所以你不能把一個字符串分配給不同的類名。
作爲'final'的'String'是無關緊要的,無論如何你都不能將一個超類的引用賦給一個子類變量(沒有強制轉換)。 –
不,您不能,因爲MyClass
不是String
的超類。
一種選擇是讓你的類的靜態工廠方法fromString
,並使用像這樣:
MyClass obj = MyClass.fromString("String");
在這種方法中,你可以定義從String
轉換到MyClass
。
不,您不能指定用戶定義的轉換。 –
有沒有試過嗎?它工作?你的錯誤是什麼? – Jpsh
'String strLiteral =「String value」'是可能的,'MyClass obj =「String」'不起作用,因爲Jon Skeet已經聲明你不能指定用戶定義的轉換。你可以得到的最接近的就是'MyClass obj = new MyClass(「String」)'。 – Thomas