适用于java.io.FileDescriptor.FileDescriptor()的JavaDoc说:
Constructs an (invalid) FileDescriptor object.
如果构造函数没有用处,为什么它的访问级别没有被声明为包私有?
最佳答案
此构造函数是公共的,因为它在java.io之外使用.
原文链接:https://www.f2er.com/java/438134.html在JRE 7u4 Linux x86中使用新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的代码(I.E.JRE本身)也可以创建自己的有效FileDescriptor,因此应该允许访问FileDescriptor().但是,没有办法将构造函数的访问权限仅限于JRE类,因此它是公共的.