【发布时间】:2019-01-16 08:32:15
【问题描述】:
最初我有一个包含所有方法的类。 (这不是正确的语法,但应该足以证明我想要做什么)
class A {
public static class1
public static method1
public static var1
...
public testmethod2
public testvar2
...
}
在这种情况下我会这样做
import static com.example.A.class1;
import static com.example.A.method1;
在其他类中导入。
但是我想对客户端隐藏 testMethods。所以我对代码进行了一些重组,使其根据 buildType 使用不同版本的 A 类(在不同的文件中)
class A_shared {
public static class1
public static method1
public static var1
...
}
在调试中:
class A extends A_shared {
public testmethod2
public testvar2
...
}
发布中:
class A extends A_shared {
}
效果很好。人们仍然可以在没有注意到任何变化的情况下使用 A 类。
但是对于class1,我必须导入 A_shared 而不是 A 而对于静态方法和变量我仍然可以使用 A 来导入。
import static com.example.A_shared.class1;
import static com.example.A.method1;
我错过了什么吗? 在我重构代码之后,Java/Android 中是否可以从 A 导入 class1,这样我就不会在客户端破坏任何东西?
如果不可能,那么...
1. 有没有更好的方法来实现重组,以隐藏基于不同类型的构建/风格的特定方法(变量),同时不破坏客户端的任何内容?
2.我很好奇为什么只有class1必须与超类一起导入而其他静态方法和vars不需要。
感谢您的任何想法。
2018 年 8 月 9 日更新:
我应该详细说明我们的用例。
我正在为我们的 Android 应用程序开发人员提供一个库,以包含在 gradle 依赖项中。
该应用有两个版本。
在调试版本中,他将包含调试版本的库,其中包含所有测试方法和变量,以便他可以显示应用程序的内部状态。
在发布版本(它上升到游戏商店)中,他使用了库的发布版本,所有测试内容都被剥离了。
对于某些测试方法,我们运行它以进行内部基准测试以集成测试我们的库。它们不在应用程序的生产版本中运行。这些测试方法和变量用于监控和基准测试。
我们的客户在他们自己的应用程序中使用库 (SDK) 的发布版本。
【问题讨论】:
-
接口的默认方法是没有问题的,因为它只支持超过 api 级别 24。
标签: java android architecture