【问题标题】:Instantiating a interface CharSequence实例化接口 CharSequence
【发布时间】:2014-07-04 03:33:56
【问题描述】:
CharSequence[] items = { “Google”, “Apple”, “Microsoft” };

如果CharSequence是一个接口,那么在上面的例子中我们不是实例化一个接口吗?

【问题讨论】:

  • 您正在为接口定义的 type 数组分配初始值。

标签: java interface charsequence


【解决方案1】:

您正在实例化一个String 数组,然后将其分配给具有CharSequence 数组类型的变量。这是因为String 可以分配给(实现)CharSequence。这里还有几个例子:

CharSequence cs = "Whatever";
List<Integer> list = new ArrayList<>();

因此,您实际上是在实例化具体类型并将它们分配给具有接口类型的变量/字段。

【讨论】:

    【解决方案2】:

    这是一个使用自定义类的类似示例:

    interface A{}
    
    class A1 implements A{}
    
    class A2 implements A{}
    
    class A3 implements A{}
    
    public class B {
    
        A[] items = {new A1(),new A2(), new A3()};
    
    }
    

    items 中的每个对象实际上都是实现类型 (A1,A2,A3) 而不是 A 本身。

    在你的例子中,这样的事情也是可能的:

    CharSequence[] items = {"Google",new StringBuffer("Apple"), new StringBuilder("Microsoft")};
    

    【讨论】:

      【解决方案3】:

      CharSequence[] items = { “Google”, “Apple”, “Microsoft” };

      这里只有引用变量声明的类型是接口,没关系。

      但数组中的对象是 String 对象——其类实现了 CharSequence 接口。

      说,CharSequence[] items = { new Charsequence() } 会导致编译错误

      CharSequence[] items = { new someclass() }

      在哪里

      class someclass 实现 CharSequence {

      //

      }

      没问题

      【讨论】:

      • 能否请教下负分的原因?
      • 只是猜测,但它可能是文本的格式
      • 但谁会否决这个?他们为什么保持沉默?这个答案是没有帮助还是不正确?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2013-05-20
      相关资源
      最近更新 更多