安卓工作室 3.4
我有下一个 Activity :
public class CartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
someCommonMethod()
}
private void someCommonMethod() {
// some code
}
}
现在我有 2 种构建类型:debug
和 release
。
在 debug
中,我将方法 someDebugMethod()
添加到 Activity 中
public class CartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
someCommonMethod()
someDebugMethod()
}
private void someCommonMethod() {
// some code
}
private void someDebugMethod() {
// some debug code
}
}
在 release
中,我将方法 someReleaseMethod()
添加到 Activity 中
public class CartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
someCommonMethod()
someReleaseMethod()
}
private void someCommonMethod() {
// some code
}
private void someReleaseMethod() {
// some debug code
}
}
我看官方documentation
现在项目的结构是:
app\src\debug\java\com\myproject\CartActivity.java
app\src\release\java\com\myproject\CartActivity.java
我从 app\src\main\java
中删除了 CartActivity.java
。
因此,我有两个文件 CartActivity.java
。
不错。
现在,当我在 debug
构建类型中启动应用程序时,然后在 debug 文件夹中运行 CartActivity
。
当我在 release
构建类型中启动应用程序时,然后在 release 文件夹中运行 CartActivity
。
不错。它工作正常。
但假设现在我需要更新公共(public)方法someCommonMethod()
。此方法用于两种构建类型。
因此,我需要两次更新此方法。首先在 app\src\debug\java\com\myproject\CartActivity.java
和
然后在 app\src\release\java\com\myproject\CartActivity.java
所以我觉得这样不好
因为这是重复代码。当更新方法 someCommonMethod()
时,我需要在 两个文件 中复制和粘贴 每次。
真的很糟糕。
如何避免重复代码?
理想的方法是在 CartActivity.java
中只有 delta。
- 在
app\src\debug\java\com\myproject\CartActivity.java
中有唯一方法someDebugMethod()
- 在
app\src\release\java\com\myproject\CartActivity.java
中有ONLY方法someReleaseMethod()
和通用代码在app\src\main\java\com\myproject\CartActivity.java
这可能吗?
附言假设我有 3 种构建类型。 因此,我需要更新三个文件中的相同代码。确实不好。
最佳答案
只需在
中创建一个CommonCartActivity
app\src\main\java\com\myproject\CommonCartActivity.java
然后扩展类以覆盖 flavor 实现中的方法。
public class CartActivity extends CommonCartActivity {
protected void someCommonMethod() {
// some code
}
}
通过这种方式,CartActivity
仅继承自 CommonCartActivity
,没有其他任何东西,以两种形式重复。
关于android - 两种构建类型 - 重复代码。不好解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254581/