【问题标题】:Is it possible to create an interface that is cast compatible with particular hidden api interface in Java?是否可以创建一个与 Java 中特定隐藏 api 接口兼容的接口?
【发布时间】:2011-09-16 20:15:37
【问题描述】:

我开发移动应用程序(Android、J2ME),想知道以下步骤是否可行:

  1. 假设应用程序必须在支持 J2ME 的平台上运行
  2. 该平台包含一些特定于平台的 API,例如诺基亚手机上的 NokiaUI。 API 中包含的一些类实现了 API 中也包含的接口。
  3. 平台制造商为 API 提供完整的 javadoc,以及模拟器和类路径库。 API 中包含的所有接口定义都是已知的,因为它们存在于 javadoc 中。
  4. 创建一个新的 J2ME 项目,并且不包含特定于平台的可选包,因此无法从包中导入。
  5. 从特定于平台的 API 中选择随机接口(例如 SomeInterface)并在项目中创建其精确定义。接口包的名称必须与所选接口包完全相同。
  6. 假设接口定义为:

    public interface SomeInterface
    {
        public void someMethod();
    }
    
  7. 选择一个实现该接口的类,并使用newInstance()方法对其进行实例化。

  8. 将实例化对象转换为 SomeInterface。
  9. 在接口上调用 someMethod()。

这一切都有可能吗,还是会在演员阵容中发生 ClassCastException ?

【问题讨论】:

  • 如果这是 regular Java,答案是“是”。不过,我不使用 J2ME(或 Dalvik) :( 祝你好运。最好/最简单地试一试——如果它不起作用 ,然后分析情况,如果需要,发布另一个 SO问题,说明情况和发生的错误情况。

标签: java android inheritance interface java-me


【解决方案1】:

某些手机(例如诺基亚 Symbian)上的 Midp 安装程序不会安装与平台类具有相同包和类名的类的应用程序。

如果您尝试这样做以在不同平台之间创建兼容性,那么您只需要创建两个版本的应用程序,其中一个发布您自己的类版本,另一个从平台使用它们。

如果您的意图是覆盖在 midp 上无法实现的平台类。

【讨论】:

  • 我明白了。根据您的回答,我还有一个问题 - 如何准备一个库,其中包含我将使用的接口定义(与特定于平台的接口兼容)?我的意思是只需要这个库来避免编译器投诉,但最后我不希望它的内容包含在 JAR 中。我想到了Android SDK中的android.jar之类的库,其中所有类都与平台类完全兼容,但是这些类中的每个方法都只是一个没有主体的虚拟方法。总而言之:如何制作自定义类路径类库,使您能够使用隐藏或特定于平台的 api?
猜你喜欢
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多