我有一个抽象基类和两个子类;我在两个子类中有“相同”字段,使用“不同”注释互相注释,我想将字段“放”到基类中,并在子类中添加注释。
有可能吗? (遵循非工作伪代码)
abstract class Base {
Object field;
}
class C1 extends Base {
@Annotation1
super.field;
}
class C2 extends Base {
@Annotation2
super.field;
}
答案 0 :(得分:2)
你不能"覆盖" java中的一个字段,所以,不,严格来说,你不能做你想要的。
一般来说,"相同"似乎很奇怪字段需要不同的注释,表明您的设计可能存在问题,但如果不了解细节则很难说清楚。
大多数注释使用访问器方法与使用成员字段的方式相同。因此,您可以做的是让您的字段保密,并为其提供setField()
和getField()
访问者。然后,您可以覆盖子类中的那些,并以不同方式进行注释。
答案 1 :(得分:0)
假设你有这些布局:
<强> fragment1.xml:
强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/commonView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/viewInFragment1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<强> fragment2.xml:
强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/commonView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/viewInFragment2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
然后你可以拥有这些Fragment
类:
@EFragment
public class BaseFragment extends Fragment {
@ViewById
TextView commonView;
@AfterViews
void setupViews() {
// do sg with commonView
}
}
@EFragment(R.layout.fragment1)
public class Fragment1 extends BaseFragment {
@ViewById
TextView viewInFragment1;
@Override
void setupViews() {
super.setupViews(); // common view is set up
// do sg with viewInFragment1
}
}
@EFragment(R.layout.fragment1)
public class Fragment2 extends BaseFragment {
@ViewById
TextView viewInFragment2;
@Override
void setupViews() {
super.setupViews(); // common view is set up
// do sg with viewInFragment2
}
}