簡體   English   中英

實用工具類 - 正確的方法是什么?

[英]Utility Class - What is the correct approach?

具有公共靜態的所有方法的實用程序類的正確方法是什么。
我應該使用最終類還是抽象類?
請給出建議。
例如:

public final class A{ 
    public static void method(){
        /* ... */
    }
}

要么

public abstract class A{
    public static void method(){
        /* ... */
    }
}

abstract有其自己的目的。 如果你想要其他類( override )實現的一些類功能,那么你使用abstract。

如果它只是實用程序類,但你不希望其他類繼承它,那么我會選擇final類。 如果實用程序類只有static方法,那么任何方法都不能覆蓋它們,所以將它們放在non-final類中也沒有區別。

創建實用程序類的最佳方法。 如果您不希望其他類繼承它。

//final, because it's not supposed to be subclassed
public final class AlertUtils 
{ 

// private constructor to avoid unnecessary instantiation of the class
    private AlertUtils() {
    }

  public static ..(){}//other methods
}

final這里比abstract更有意義。 通過將類標記為final ,您禁止擴展類。 另一方面,將類標記為abstract是相反的,因為沒有子類的抽象類沒有多大意義。 所以預計會延長。

使類最終並添加一個私有構造函數。 (這是像java.lang.Math這樣的類使用)

public final class A { 
    private A() {}

    public static void method() {
    }
}

如果你希望其他類使用這個類的功能,那么使它成為抽象的其他類使它成為最終

這些是我發現的一些指導原則:

  • 所有方法都必須是公共靜態的,因此無法覆蓋它們。
  • 構造函數必須是私有的,因此它會阻止實例化。
  • 該類的最終關鍵字可防止子類化。
  • 類不應具有任何非final或非靜態類字段。

正如您所問,類名不能是抽象的(不可取) - >這意味着您計划在另一個類中實現它。 如果要防止子類,請使用final作為類名; 如果要阻止實例化,請使用私有構造函數。

暫無
暫無

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

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