gpt4 book ai didi

java - 为什么 java.io.FileDescriptor 的构造函数是公开的?

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:29 26 4
gpt4 key购买 nike

java.io.FileDescriptor.FileDescriptor() 的 JavaDoc说:

Constructs an (invalid) FileDescriptor object.

如果构造函数没有任何用途,为什么它的访问级别没有声明为package-private

最佳答案

此构造函数是公共(public)的,因为它在 java.io 之外使用。

在 JRE 7u4 Linux x86 中使用 new FileDescriptor() 的类:

java.io.FileInputStream
java.io.FileOutputStream
java.io.RandomAccessFile

java.lang.UNIXProcess
java.net.AbstractPlainDatagramSocketImpl
java.net.AbstractPlainSocketImpl
java.net.ServerSocket

sun.net.sdp.SdpSupport
sun.nio.ch.FileChannelImpl
sun.nio.ch.FileDispatcherImpl
sun.nio.ch.IOUtil
sun.nio.ch.PipeImpl
sun.nio.ch.SctpServerChannelImpl
sun.nio.ch.ServerSocketChannelImpl
sun.nio.ch.UnixAsynchronousServerSocketChannelImpl
sun.nio.fs.UnixChannelFactory

有一个 sun.misc.SharedSecrets 方法允许程序员将 FileDescriptor 的状态更改为有效状态(此代码段位于 java .io.FileDescriptor):

  static {
sun.misc.SharedSecrets.setJavaIOFileDescriptorAccess(
new sun.misc.JavaIOFileDescriptorAccess() {
public void set(FileDescriptor obj, int fd) {
obj.fd = fd;
}

public int get(FileDescriptor obj) {
return obj.fd;
}

public void setHandle(FileDescriptor obj, long handle) {
obj.handle = handle;
}

public long getHandle(FileDescriptor obj) {
return obj.handle;
}
}
);
}

这意味着任何可以访问 SharedSecrets 的代码(即 JRE 本身)也可以创建自己的有效 FileDescriptor,因此应该允许访问 文件描述符()。但是,无法将构造函数的访问限制为仅 JRE 类,因此它是公共(public)的。

关于java - 为什么 java.io.FileDescriptor 的构造函数是公开的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com