2

次のフラグメントがあるとします。

public class FragmentA extends Fragment {

    public interface CallerProxy {
        public void publishParams(Object... dataParams);
    }

    private CallerProxy mCallerProxy;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (activity instanceof CallerProxy) {
            this.mCallerProxy = (CallerProxy) activity;
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        this.mCallerProxy = null;
    }

    protected void sendCustomMessage(Object... objects) {
        if (mCallerProxy != null) {
            mCallerProxy.publishParams(objects);
        }
    }

}

インターフェイスを静的または非静的に定義することの違いは何ですか? staticを宣言するかどうかに関係CallerProxyなく、親アクティビティで次のようになります。

public class MyProxyActivity extends FragmentActivity implements CallerProxy {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(...) and other relevant code
    }

    @Override
    public void publishParams(Object... dataParams) {
        // /
    }
}

私が知っていることから、インターフェイスが静的として宣言されている場合、インターフェイスはFragmentAクラスオブジェクトに関連付けられており、静的であると宣言していない場合はFragmentAインスタンスオブジェクトに関連付けられています-これはメモリリークにつながりますか?

インターフェイスが静的でない場合に発生する可能性のある問題とその理由は?

4

1 に答える 1

1

interfaceクラスメンバーとして定義された はすでに(暗黙的に)宣言されているためstatic、言及した2つのシナリオに違いはありません。また、参考までにJava言語仕様からの引用:

Member interfaces (§8.5) are implicitly static so they are never considered to be inner classes.

于 2013-11-05T17:18:56.890 に答える