首页 > 解决方案 > 如何在没有主功能的情况下将数据正确插入 vec.get(0)?

问题描述

class Instruction{
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>();
  vec.add(buf);  <--error
  ...
}

class Buffer{
  String name = new String( "Buffer-" );
  Vector<String> word = new Vector<String>();
  public Buffer(){
    name = new String( "Buffer-" );
    word = new Vector<String>();
  } // public
}

error: <identifier> expected

我想buf插入vec.get(0);

但是,它有一个问题。

我该如何解决?

我不知道发生了什么事。这不应该是错误的。

标签: javavector

解决方案


好的,显然答案是add必须从方法调用函数,可能是构造函数:

class Instruction {
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>();
  public Instruction() {
    vec.add(buf);
  }
}

但是还有一种不使用构造函数的有趣方式:

class Instruction {
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>() {{
    add(buf);
  }};
}

这是“双括号初始化”,稍微滥用 Java 语法,但确实有效。外面的大括号集引入了一个匿名子类Vector<Buffer>。内大括号是该子类的初始化块。

vec您还可以使用您为此目的创建的另一个集合进行初始化:

class Instruction {
  Buffer buf = new Buffer();
  Vector<Buffer> vec = new Vector<Buffer>(Collections.singleton(buf));
}

推荐阅读