簡體   English   中英

使用匿名類返回Java中的值

[英]Using an anonymous class to return values in Java

考慮以下代碼:

public interface MyClass {
    public final String getMyObject1();
    public final String getMyObject2();
}

public class MyClass1 implements MyClass {
    private String myObject1;
    private String myObject2;
    public MyClass1(String myObject1, String myObject2) {
        this.myObject1 = myObject1;
        this.myObject2 = myObject2;
    }
    public String getMyObject1() {
        return myObject1;
    }
    public String getMyObject2() {
        return myObject2;
    }
}

public interface MyClass2 extends MyClass {
    public static MyClass2 newInstance(String myObject1, String myObject2) {
        return new MyClass2() {
            public String getMyObject1() {
                return myObject1;
            }
            public String getMyObject2() {
                return myObject2;
            }
        };
    }
}

我像這樣使用它們

public static void func(MyClass m) {
    m.getMyObject1();
    m.getMyObject2();
}
func(new MyClass1(o1, o2));
func(MyClass2.newInstance(o1, o2));

我想知道它們之間有什么區別,是否只需要讀取值(即使用MyClass作為傳遞值的“結構”),使用匿名類是否可以是一種更簡單的方法?

否則,退縮是什么?

編程的一個核心規則:盡量不要讓讀者感到驚訝。

您在此處將接口內的靜態類用作“工廠”方法的方法非常令人驚訝(相信我:我已經看過很多 Java代碼)。

如果有的話,處理這種事情的更“常見”的方法是:創建一個名稱稍微相似的靜態類,就像java.lang.Object和java.lang.Objects一樣,它們帶有一些有用的靜態幫助器方法。

除此之外,Java中已經有一個類可以幫助處理任意數量的“命名”值。 這就是所謂的Map

最后:對於“ DTO”( 數據傳輸對象 )有一些很好的論據,但尤其是。 對於“初學者”,您應該研究“真正的” OO設計。 基於SOLID原則。 從這個意義上說:設計能夠精確建模您的問題領域的真實類; 並且提供有用的抽象。 具有任意數量成員的結構...不在任何類別中。

這里的問題不是代碼,而是設計。 我很想知道您要在此處設計的實際用例。

當然,第二種方法存在局限性,例如創建類后就無法再更新對象的值,因為您只有一種方法來獲取傳遞的對象的值。

回到設計:

如果接口實現了該接口,則它應該是您的類可以執行的操作。 在您的情況下,您嘗試使用接口中的兩個方法返回兩個實例變量的值,這是一種操作,但它忽略了封裝的基本原理。

如果您的類定義/擁有那些實例變量,則它應該具有該方法的getter和setter方法。 您不需要接口即可執行此操作。 因此,理想情況下,不需要您的界面。 使用MyClass1對象的任何其他類都應直接使用MyClass1的getter和setter。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM