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