1

Java プロジェクトのすべてのパッケージとクラスにアクセスできるように、すべての CONSTANTS をどこに置くべきか疑問に思っていました。そして、それを以下のメインクラスにどのように含めますか?

私は古典的な ASP のバックグラウンドを持っているので、以下のコードに間違いがあった場合は申し訳ありません。

StickyNotes() クラス。

package base;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class StickyNotes extends JFrame {

    private static final long serialVersionUID = 1L;
    private final static String SAVE_CHNGS = "Save changes?";
    private final static String TITLE_AYS = "Are You Sure?";

    private void createStickyNotesGUI() {
        // Create and set up the window.
        JFrame frame = new JFrame("Java Sticky Notes");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout(FlowLayout.LEFT));

        // Add Main Menu
        MainMenuBar mainMenu = new MainMenuBar();
        frame.setJMenuBar(mainMenu.createMainMenuBar(frame));

        // Add Content Pane // can I pass a layout object?
        frame.setContentPane(ContentPaneCreator.createContentPane());
        // contentPane.add(scrollPane, BorderLayout.CENTER);

        // Add Tool Bar
        ToolBarCreator toolBar = new ToolBarCreator();
        frame.getContentPane().add(toolBar.createToolBar(), BorderLayout.NORTH);

        // Add Label
        frame.getContentPane().add(
                LabelCreator.createLabel(frame,
                        "use Swing and JavaFX together."), BorderLayout.NORTH);

        // Display the window.
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

        // frame.setExtendedState(JFrame.NORMAL);
        frame.setVisible(true);
    }

    public void doExit(JFrame frame) {
        boolean fDirty = true;
        if (fDirty)
            switch (JOptionPane.showConfirmDialog(StickyNotes.this, SAVE_CHNGS,
                    TITLE_AYS, JOptionPane.YES_NO_OPTION)) {
            case JOptionPane.YES_OPTION:
                // if (doSave())
                frame.dispose();
                break;
            case JOptionPane.NO_OPTION:
                frame.dispose();
            }
        else
            frame.dispose();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new StickyNotes().createStickyNotesGUI();
            }
        });
    }
}
4

7 に答える 7

5

と呼ばれるクラスの作成を提案する人もいConstantsます。そうしないことをお勧めします。各定数は、最も関連性の高い場所に保管してください。あなたが与えた定数の場合、それらはローカライズ可能なテキストであり、おそらく最初にプロパティファイルにあるはずです。

「複数オプション」の値については、列挙型の使用を検討する必要があります。

たとえば、グアバのように、特定の定数セットまたは「有効な定数」を保持するクラスを作成することがあります。Charsets

しかし、プロジェクト全体の単一の定数セットですか? まれに良いアイデアです。もちろん、プロジェクト全体で定数にアクセスできないという意味ではありませんpublic static final。また、値が不変である限り、フィールド (またはアクセサー メソッド) を作成するだけでも問題ありません。(変更可能な場合は、スレッド化について慎重に検討する必要があります。)

于 2012-07-21T12:31:49.587 に答える
3

そうしないでください。本当に、しないでください。定数は、それらが属するクラスに入れます。定数が複数のクラスで使用されることはほとんどありません。たとえそうであっても、定数は特定のロジックにリンクされており、このロジックを実装するクラスで定義する必要があります。

たとえば、日付を解析するためのデフォルトの日付パターンがあるとします。このパターンの定数は、DateParserこの定数を使用するクラスで定義する必要があります。

とにかく、すべての定数を単一のクラスに入れることは、スケーリングしません。アプリが大きくなると、競合を避けるために非常に大きな名前の数百の定数がこのクラスに含まれることになり、その使用目的を定義するスコープ クラスがなくなります。

于 2012-07-21T12:35:21.160 に答える
1

すべての定数を含む CONSTANTS.java を作成し、どこにでもインポートします。Java には、定数を含むファイルに名前を付ける必要があるという厳格なルールはありません。

于 2012-07-21T12:29:23.133 に答える
1

Java には、定数を格納する特定のクラスはありません。

特定のコンテキストでは:

  • 多くの異なるクラスから定数にアクセスする必要がある場合
  • プロジェクト中に定数の数が増える可能性がない場合は、

    クラス (たとえば、Constant という名前) を作成し、ここですべての定数フィールドを宣言することをお勧めしますpublic static final <objectType> <OBJECTNAME>(OBJECTNAME は大文字にする必要があります)。

    次に、定数を使用する場合は、クラスに : を使用してインポートを追加しimport <your_package_name>.<your_constant_class>、定数呼び出しを使用しConstant.fieldnameます (クラスの名前が の場合Constant)

ところで、あなたの例では、Swing アプリケーションのメッセージに対してそれを行いたいようです。この場合、おそらく最善の解決策ではありません。定数は、それぞれが使用されるビジネス クラスに保持してください。これにより、他の開発者にとって読みやすく、理解しやすくなります。プロジェクトが成長する (そして定数の数が増える) と、Constant クラスは本当に混乱します。

多くの異なるクラスで定数を使用する必要があり、定数の数が増える可能性が限られている場合にのみ、Constant クラスを使用します。

于 2012-07-21T12:30:18.983 に答える
1

定数を作成する「有史以前の」慣用的な方法は、定数をインターフェイスに含めてから、そのインターフェイスを継承することでした。

// This is archaic - do not do it like this:
interface MyConstants {
    int A = 5;
}

class MyClass implements MyConstants {
    public static void main(String[] args) {
        // Note that A is referenced by itself, not as MyConstants.A
        System.out.println(A);
    }
}

現在、Java は同じ効果を達成するためのより良い方法を提供しています。単一のクラスで定数を定義し、そのクラスを静的にインポートします。このクラスは、関連する定数をグループ化する方法として機能します。

package com.my.test;
public class MyConstants {
    static final int A = 3;
}

package com.my.other;
import static com.my.test.MyConstants;
   class MyClass {
    public static void main(String[] args) {
        // Note that A is referenced by itself, not as MyConstants.A
        System.out.println(A);
    }
}
于 2012-07-21T12:33:19.620 に答える
1

1.すべての定数(つまり public static final 変数)を持つ別のクラスを作成します。

2.次に、このクラスの名前「。」を使用します。(ドット) アクセスするための定数名

例えば:

定数保持クラス

public class MyConstant{


  public static final int MAX = 100;
  public static final int MIN = 10;
  public static final String ID = "5U23";



}

他のクラスからの定数へのアクセス。

public class Test{

public void go(){

int m = MyConstant.MAX;

}


}

3.将来、定数を変更するときにクラスに影響を与えたくない場合は、定数を保持するプロパティ ファイルを用意してください。

于 2012-07-21T12:33:33.570 に答える
1

クラスを作成し、そのクラスで定数を定義してインポートします。

于 2012-07-21T12:26:34.233 に答える