2

このサイトからチュートリアルを読んでいます。http://tutorials.jenkov.com/java-unit-testing/matchers.html 著者は経験豊富だと思います。このようなコードを見ました。また、メソッドのパラメーターを変数に割り当ててから、メソッド内で使用するのが好きな人もいます。これがこの線です。protected Object theExpected = expected;

このコーディング スタイルの利点を教えてください。これは、オブジェクトのステータスが変更されるのを回避しようとしていますか?

パラメータがオブジェクトではなくプリミティブ変数である場合はどうなりますか。

そして、それが String のような不変オブジェクトである場合はどうでしょう。ありがとうございました。

public static Matcher matches(final Object expected){

    return new BaseMatcher() {

        protected Object theExpected = expected;

        public boolean matches(Object o) {
            return theExpected.equals(o);
        }

        public void describeTo(Description description) {
            description.appendText(theExpected.toString());
        }
    };
}

アップデートはこちら

オブジェクトを取得した後もこのパラメーターにアクセスできるかどうかを確認するために、別のテストを行いました。

package myTest;


public class ParameterAssignTest {

    public static void main(String[] args) {
        MyInterface myClass = GetMyClass("Here we go");
        System.out.println(myClass.getValue());
        System.out.println(myClass.getParameter());
    }

    public static MyInterface GetMyClass(final String myString){

        return new MyInterface() {

            protected String stringInside  = myString;

            @Override
            public String getValue() {
                return stringInside;
            }

            @Override
            public String getParameter() {
                return myString;
            }
        };
    }
}

出力:

Here we go
Here we go

これは、このパラメーターをローカル変数に割り当てても、まだ機能するということですか?

4

3 に答える 3

2

theExpectedに割り当てることで何かが達成されるとは思いません。

予想どおり final は匿名クラス内でアクセスできます。オブジェクトで直接使用された場合、GC は行われず、宣言さdescribeToれたローカル スコープが残っていても参照は有効なままになります。expected

リンク先の投稿の作成者は、この明示的なスタイルの方が読みやすいと考えている可能性があります。

于 2015-02-11T15:10:55.307 に答える