2015-12-24 48 views
0

我試圖用StringBuffer和仿製藥,但該代碼不會編譯:使用StringBuffer的和Generic

[Gen.java]

class Gen<T> 
{ 
T ob; 
//Constructor 
Gen (T o) 
{ 
ob = o; 
} 

void showtype() 
{ 
    System.out.println("Type of T is:"+ob.getClass().getName()); 
} 

T getOb() 
{ 
    return ob; 
} 

} 

[GenDemo.java]

public class GenDemo 
{ 
public static void main(String[] args) 
{ 

    Gen<StringBuffer> objStr; 
    objStr = new Gen<StringBuffer> ("Hello"); //doesn't compile here. 
    objStr.showtype(); 
    StringBuffer str = objStr.getOb(); 
} 
} 

我是初學者。所以,如果這個問題對你來說太基本了,我很抱歉。有人可以幫幫我嗎?代碼編譯好,如果我用「字符串」替換「的StringBuffer」

感謝

+3

你爲什麼認爲它應該編譯?你對這個錯誤信息感到驚訝嗎?你認爲'StringBuffer'類型是什麼?它與'String'有什麼關係? –

+2

請不要使用StringBuffer。它在十多年前被StringBuilder所取代。 –

+0

你可以發佈那裏堆棧跟蹤? –

回答

1

你試圖初始化一個Gen<StringBuffer>String。更改初始化爲objStr = new Gen<StringBuffer>(new StringBuffer("Hello")),一切都應該沒問題。

+0

完美!感謝sisyphus。另外,我是這個論壇的新手......所以我點了箭頭給你投票,但它顯示「-1」 - 我不確定這是否等同於「不喜歡」。如果是的話,我誠懇地道歉。我不熟悉stackoverflow。這是我的第一篇文章。 – watchtower

+0

@watchtower由於您現在還沒有足夠的聲望點,因此您不能投票,因爲您的投票需要[15聲望](http://stackoverflow.com/help/privileges/vote-up),反對投票[125聲望](http://stackoverflow.com/help/privileges/vote-down))。只有你現在可以做的事情來表明你對****答辯者的讚賞是接受你認爲最好的答案。有關接受答案的更多信息可以在這裏找到:http://meta.stackexchange.com/a/5235/186652。 – Pshemo

3

您不能在Java中的不兼容類型之間進行分配。例如你不能這樣做

StringBuilder sb = "Hello"; // the object String is not a StringBuilder 

你可以做的是將一個類型的引用傳遞給另一個類型的構造函數,

StringBuilder sb = new StringBuilder("Hello"); 

,你可以做

Gen<String> str = new Gen<>("Hello"); 

Gen<StringBuilder> sb = new Gen<>(new StringBuilder("Hello")); 

然而,Java不支持的對象或引用的隱式轉換。

+1

謝謝彼得...這工作... – watchtower