代码之家  ›  专栏  ›  技术社区  ›  watchtower

使用StringBuffer和泛型

  •  0
  • watchtower  · 技术社区  · 9 年前

    我试图使用StringBuffer和Generics,但代码无法编译:

    [通用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 回复  |  直到 9 年前
        1
  •  3
  •   Peter Lawrey    9 年前

    您不能在Java中的不兼容类型之间进行赋值。e、 你不能这样做

    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不支持对象或引用的隐式转换。

        2
  •  1
  •   sisyphus    9 年前

    您正在尝试初始化 Gen<StringBuffer> 用一个 String 。将初始化更改为 objStr = new Gen<StringBuffer>(new StringBuffer("Hello")) 一切都会好起来的。