的JavaDoc java.io.FileDescriptor.FileDescriptor()說:爲什麼java.io.FileDescriptor的構造函數是公共的?
構造一個(無效的)FileDescriptor對象。
如果沒有爲構造沒有目的,爲什麼它的訪問級別不聲明爲包私人?
的JavaDoc java.io.FileDescriptor.FileDescriptor()說:爲什麼java.io.FileDescriptor的構造函數是公共的?
構造一個(無效的)FileDescriptor對象。
如果沒有爲構造沒有目的,爲什麼它的訪問級別不聲明爲包私人?
此構造函數是公開的,因爲它在java.io
之外使用。
類使用new FileDescriptor()
在JRE 7U4於Linux x86:
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
(IE的JRE本身)還可以創建其自己的有效FileDescriptor
,因此應被允許訪問FileDescriptor()
。但是,沒有辦法將構造函數的訪問限制爲只有JRE類,因此它是公共的。
你的回答能夠對類級的文檔中找到:
@Since JDK1.0
這也是問題,比如「爲什麼是Number一個抽象類,而非接口」的答案, 「爲什麼Vector是同步的?」等。
舊的類可能會也可能不會有@Deprecated警告,但Java在去除已棄用的功能方面確實很軟。像這樣的Cruft不斷出現,因爲這些類很有用,但內部Java升級過程往往不會刪除已棄用的方法,而是將它們放在一邊,因爲這樣可以在初始Java發行版之後始終保持向後兼容性。
你在錯誤的地方問錯人。你會得到很多意見和猜測,至少在問題結束之前是不具有建設性的,但只有真正知道的人不可能在這裏找到。 – EJP 2012-07-15 21:43:43
@ s106mo我不同意這是一個錯誤,我不同意OP,它沒有任何目的:這只是乞討的問題。他們可能已經計劃例如Java.net.Socket使用它。我們不知道。 – EJP 2012-07-15 21:47:25
@ s106mo *錯誤*不應該是一個令人滿意的答案,因爲它不正確。有一個原因,請參閱我的答案。 – Jeffrey 2012-07-16 01:04:01