如何返回对返回变量的只读访问权限或对其进行写访问?

use*_*594 0 java

在下面的类中,Storeclass只有1 fruit作为字段变量.

我希望Store上课做以下两件事.一种是仅使用读取访问返回水果的数据,另一种是使用写入访问返回水果的数据.返回的数据有类型ByteBuffer.

例如,如果有人ByteBuffer通过getRead,我根本不想修改ByteBuffer.但是,如果有人获得ByteBuffer通过getWrite,然后我让他修改的内存字节缓冲区所指向的内容.

class Fruit {
    private ByteBuffer data;
    public ByteBuffer getData(){
        return data;
    }
}
class Store {
    Fruit p;
    public ByteBuffer getRead(){
        return p.getData();
    }

    public ByteBuffer getWrite(){
        return p.getData();
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何,当我使用ByteBuffer时,我可以在Java中控制这个访问权限吗?或者,我是否应该在Fruit类中具有2个具有相同值但是具有不同内容的变量?

Jon*_*eet 6

在这种特殊情况下,使用起来非常简单asReadOnlyBuffer:

public ByteBuffer getRead(){
    return p.getData().asReadOnlyBuffer();
}
Run Code Online (Sandbox Code Playgroud)

通常,必须有某种包装对象(就像这里一样) - 从语言的角度来看,Java没有对象的只读"视图"的概念; 它必须由防止任何突变的代码提供.