java - 在自定义可写对象中定义集合

标签 java hadoop mapreduce writable

我正在编写一个自定义可写类,其中包含一些Java集合。谁能告诉我我的实现方式有何错误
我在构造函数中传递了两个Java集合

public class details implements Writable {
    IntWritable id;
    Text username;
    ArrayList<IntWritable> following;
    ArrayList<Text> tweets;

public details (int id, String u, ArrayList<Integer> f, ArrayList<String> t){
    this.id = new IntWritable(id);
    this.username = new Text(u);
    int i = 0;
    while(i<f.size()){
        this.following.add(new IntWritable(f.get(i)));
        i++;
    }
    i = 0;
    while(i<t.size()){
        this.tweets.add(new Text(t.get(i)));
        i++;
    }
}
@Override
public void readFields(DataInput in) throws IOException {
    // TODO Auto-generated method stub
    id.readFields(in);
    username.readFields(in);
    int size=in.readInt();
    for(int i=0;i<size;i++){
        IntWritable temp = new IntWritable();
        temp.readFields(in);
        following.add(temp);
    }
    size=in.readInt();
    for(int i=0;i<size;i++){
        Text temp = new Text();
        temp.readFields(in);
        tweets.add(temp);
    }
}

@Override
public void write(DataOutput out) throws IOException {
    // TODO Auto-generated method stub
    id.write(out);
    username.write(out);
    out.writeInt(following.size());
    for(IntWritable s : following){
        s.write(out);
    }
    out.writeInt(tweets.size());
    for(Text s : tweets){
        s.write(out);
    }
}

}

这是我得到'java.lang.nullpointerException'的错误

最佳答案

您必须像使用它之前先初始化集合。

following=new ArrayList<IntWritable>();

您只需要声明关注和鸣叫,但不对其进行初始化。

关于java - 在自定义可写对象中定义集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23054188/

相关文章:

java - 在 hadoop 中实现多个映射器和单个 reducer

java - 为什么我的 JPanel 在 JTable 内听不到鼠标变化?

java - 使用递归打印递增和递减的数字

java - 蒙特卡洛模拟预测总统选举

java - 在 HBASE 中创建表时找不到类异常

java - MapReduce 返回 NaN

java - 对于多模块 Maven 项目,Maven 依赖项未出现在 Eclipse 中

hadoop - 我们能否将我们的 HDFS 数据或 Map Reduce 输出显示为 HTML 表单或 JSP 页面?

java - 用另一个方法替换作业类中的方法 waitForCompletion()

java - 如何将第三方 jar 添加到 mapreduce 作业?