簡體   English   中英

在Java中繼承常量的最佳實踐是什么?

[英]What is the best practice of inheriting constants in Java?

我有一個抽象類,其中包含每個子類將使用的一些常量。 它們中的每一個都是靜態的,最終的和不變的

public abstract class MyAbstract {

    //some private instance fields

    protected static final long LONG_ID = 1;
    protected static final String STRING_ID = "example_id";

    //some methods

}

我知道保護靜態決賽是一種不好的做法,但是對於不可變的受保護靜態決賽呢? 我知道我可以將它們公開,但我想避免這樣做,因為常量是指用戶不需要知道的特定ID。

為了在標題“ Java中繼承常量的最佳實踐是什么?”的標題中回答您的問題,我的答案是:根本不要繼承它們。

繼承在面向對象的編程中有特殊的含義和目的,而使用繼承只是為了方便起見,因為您希望能夠訪問一組特定類中的常量並不符合此含義和目的。

如果您有要在不同類中使用的常量,則可以將這些常量放在單獨的類中。 使此類成為final類,並使構造函數private以便無法對其進行子類化和實例化:

package com.example;

public final class Constants {
    public static final long LONG_ID = 1L;
    public static final String STRING_ID = "example_id";

    // Private constructor, this class should not be instantiated
    private Constants() {
    }
}

然后,在要使用常量的類中,使用import static

import static com.example.Constants.LONG_ID;

public class Example {

    public void someMethod() {
        // Use the constant
        long id = LONG_ID;
        System.out.println(id);
    }
}

優勢在於, Example類無需擴展Constants類或實現接口,因此您無需濫用繼承,同時仍具有使用簡潔語法使用常量的便利。

暫無
暫無

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

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