Использование StringBuffer и Generics

Я пытался использовать StringBuffer и Generics, но код не компилируется:

[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" на "String"

Спасибо

2 ответа

Решение

Вы пытаетесь инициализировать Gen<StringBuffer> с String, Измените инициализацию на objStr = new Gen<StringBuffer>(new StringBuffer("Hello")) и все должно быть хорошо.

Вы не можете назначать между несовместимыми типами в 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 не поддерживает неявное преобразование объектов или ссылок.

Другие вопросы по тегам