这是一个 JAVA 概念性问题,与Selenium不相关。
示例代码如下:
// Taking a screenshot in Selenium
WebDriver driver= new ChromeDriver();
File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
字符串
当我观察时,WebDriver 和 TakesScreenshot 并不共享一个公共的超级接口。在这种情况下,转换如何有效?为什么不使用 ClassCastException?
- 如果能用一个例子来解释这一点,那就太好了。*
2条答案
按热度按时间xam8gpfp1#
让我们把Selenium排除在外,为了简单起见,使用内置类型。您的代码类似于(在类型转换方面):
字符串
这会编译并执行而不会出现异常,因为:
"hello"
是String
String
同时实现Comparable<String>
和CharSequence
CharSequence
与text
的值所引用的对象的 * 执行时 * 类型有关,而与 * 编译时 * 类型text
无关在执行时,
text
的值引用了一个String
对象(“hello”)。当涉及到强制转换时,编译时类型是Comparable<String>
的事实是无关紧要的-只要它是 * 可能的 *。(如果你试图用编译时类型转换一个表达式,而这个类型不可能是有效的,例如从String
转换到InputStream
,那么你会得到一个编译时错误。但是当编译器对强制转换可能成功感到高兴时,当涉及到强制转换的执行时处理时,变量的编译时类型是无关紧要的。omjgkv6w2#
非基元类型转换在以下两种情况下是可能的。
1.两个对象之间应该存在Is A关系
1.两个对象(类或接口)应该有一个公共的子对象
由于webdriver和takescreensht有commom child(Remote webdriver),我们可以在webdriver和takescreenshot之间执行类型转换。