在 java 中什么时候可以向下转换?
when downcasting is possible in java?
我在 java 中有一个基本问题。从我的研究中,我发现 java 中不允许向下转换,因为它会在运行时抛出异常,但在某些有限的情况下,例如 Downcasting in Java
但我不明白为什么会出现这种说法
HttpURLConnection connection = (HttpURLConnection) url.openConnection() 没有问题?
(因为openConnection()
returns一个URLConnection
对象)
具体
对不起,我的英语不好,因为我不是母语人士
因为从 url.openConnection 返回的对象在这里使用 是 一个 HttpUrlConnection 并且程序员需要访问它的方法,但是它作为一个返回界面,所以 javac
除了界面之外不知道它是什么。
换句话说,程序员破坏了API中的封装设计以访问API隐藏的功能。
URL.openConnection()
returns一个URLConnection, which is an abstract class, i.e. the returned object can never really be of type URLConnection
, but must be of a class that inherits from URLConnection
, such as HttpURLConnection.
正如您链接到的 Whosebug 线程的公认答案所说,
Downcasting is allowed when there is a possibility that it succeeds at run time:
在这种情况下,保证在运行时成功,因为返回的对象不能是抽象的实例class URLConnection
作为上面有解释。
我在 java 中有一个基本问题。从我的研究中,我发现 java 中不允许向下转换,因为它会在运行时抛出异常,但在某些有限的情况下,例如 Downcasting in Java
但我不明白为什么会出现这种说法 HttpURLConnection connection = (HttpURLConnection) url.openConnection() 没有问题?
(因为openConnection()
returns一个URLConnection
对象)
具体
对不起,我的英语不好,因为我不是母语人士
因为从 url.openConnection 返回的对象在这里使用 是 一个 HttpUrlConnection 并且程序员需要访问它的方法,但是它作为一个返回界面,所以 javac
除了界面之外不知道它是什么。
换句话说,程序员破坏了API中的封装设计以访问API隐藏的功能。
URL.openConnection()
returns一个URLConnection, which is an abstract class, i.e. the returned object can never really be of type URLConnection
, but must be of a class that inherits from URLConnection
, such as HttpURLConnection.
正如您链接到的 Whosebug 线程的公认答案所说,
Downcasting is allowed when there is a possibility that it succeeds at run time:
在这种情况下,保证在运行时成功,因为返回的对象不能是抽象的实例class URLConnection
作为上面有解释。