This question already has answers here:
What is a wrapper class?
                                
                                    (17个答案)
                                
                        
                6年前关闭。
            
        

在阅读Hadoop资料时,请始终满足一些我不太熟悉的Java概念。关于以下内容,“包装器”的概念在这里意味着什么?我们什么时候需要这种包装器,它在面向对象的语言中扮演什么角色?

最佳答案

到目前为止,答案仅是通过引用类型引用的是基本类型的表示形式。

但是尚未提及在Hadoop(或其他上下文)环境中存在这些可写包装的主要理由之一:

你可以写!

也就是说,它们允许某种“按引用传递”,这在Java中通常是不可能的。假设您有一个类似的方法

public void computeSomething(int resultA, int resultB)
{
    resultA = 123;
    resultB = 234;
}

// Used as
int a = 0;
int b = 0;
computeSomething(a, b);
System.out.println(a); // Prints 0
System.out.println(b); // Prints 0


显然,修改方法中的参数对外界没有影响。与此相反,您可以使用可写包装器来达到所需的效果:

public void computeSomething(IntWritable resultA, IntWritable resultB)
{
    resultA.set(123);
    resultB.set(234);
}

// Used as
IntWritable a = new IntWritable(0);
IntWritable b = new IntWritable(0);
computeSomething(a, b);
System.out.println(a); // Prints 123
System.out.println(b); // Prints 234

10-07 19:45
查看更多