android - 在 Button 和扩展 Button 的自定义类 MyButton 之间进行转换时出错
问题描述
我正在使用 Android Studio 开发一个 android 应用程序。我编写了一个名为“MyButton”的自定义类,它扩展了 Button。我还有一个带有几个按钮的资源文件。在执行时,我收到一个异常,说我无法将 Button 转换为 MyButton。该行是:
myButton = (MyButton) view.findViewById(R.id.button1);
button1 是资源文件中声明的 Button 的 id。myButton 是 MyButton 类类型的数据。
解决方案
你不可以做这个。
因为您使用 Button 创建了 MyButton。Button 是独立的,但 MyButton 依赖于 Button。当你声明
MyButton button = (Button) findByElementById()
它会导致编译器错误。因为编译器知道 MyButton 是一个 Button Only Button 不是 MyButton。
但你可以这样做
Button button = new MyButton()
因为 MyButton() 是一个 Button()
或者
Button button = (Button) new MyButton()
但是在这里您不需要将 MyButton() 转换为 Button() 因为编译器已经知道 MyButton() 是 Button()
在java中你只能向上转换和向下转换。看看 Java Downcasting 和 Upcasting 规则会让你更清楚
推荐阅读
- python - 如何访问数据框中 dtype 对象的完整字符串?
- javascript - 如何使用 Typescript 和 Webpack 捆绑纯 JavaScript 依赖项
- java - closing inaccesible resources
- ms-access-2013 - 在 Access 中传输电子表格而不进行格式化
- javascript - 我们可以用 JS 将数据打印到文件中吗?
- css - 如何在 Material UI 网格中应用装订线而不是边距?
- vue.js - b-form-tags - Bootstrap Vue - 全选
- powershell - (&(&(&( .. ))) 在 PowerShell (Windows) 中有什么作用?
- flutter - IOS设备中的Flutter / Release模式无法正常工作
- python - 添加到列表时无法从字符串中删除换行符?