将注释添加到父类中定义的字段

时间:2014-12-17 11:30:02

标签: java annotations android-annotations

我有一个抽象基类和两个子类;我在两个子类中有“相同”字段,使用“不同”注释互相注释,我想将字段“放”到基类中,并在子类中添加注释。

有可能吗? (遵循非工作伪代码)

abstract class Base {
    Object field;
}

class C1 extends Base {
    @Annotation1
    super.field;
}

class C2 extends Base {
    @Annotation2
    super.field;
}

2 个答案:

答案 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
    }
}