2

Javaの経験があまりないので間違っているかもしれませんが、ここで質問です。

多くのメソッドを含むクラスがあります (基本的には単純なライブラリです)。

このクラスのオブジェクトを作成しますMyLibrary obj = new MyLibrary(parameters);

パラメータは、ライブラリが正しく実行されるために必要な機能を設定します。

次に、obj.getSomething/ obj.setSomething/obj.createSomethingなどを呼び出すことができます...

私のメイン クラスでは、この種のライブラリ オブジェクトは 1 つだけ必要です。

さて...それをオブジェクトとして使用するのではなく、それを配置して、extends手動で呼び出すコンストラクターのようなライブラリ内に関数を作成する方が便利でしょうか?


編集:

one クラスと MyLibrary の関係は非常に密接です。基本的に、似たようなことをするクラスがたくさんありますが、上位層の機能がいくつか異なります。したがって、これらすべてのクラスにある必要があるメソッドを分離しました。

shapeclass とtriangle, circle, squareexampleに非常に似ているようです。すべてのファンデーションが含まれているのと似ていますMyLibraryshape

4

8 に答える 8

5

あなたが説明したことは、Java の に似たユーティリティ クラスCollectionsに非常に似ています。このクラスには、staticメソッドと、インスタンス化を防ぐためのプライベート コンストラクターしかありません。これは、Java でよく知られている慣用的なパターンです。これを使用して、関連する機能を提供する独自のメソッド グループを作成できます。

ユーティリティ クラスを拡張したり、インスタンス化したりしてはいけません。Java-5 以降では、クラスを明示的に参照せずにメソッドを使用できるように、それらを静的にインポートできます。

于 2012-07-27T15:39:01.260 に答える
3

extends継承階層が必要な場合に使用されます。ここでは、コードを 2 つの別個のクラスに配置する方がより論理的に思えます。

また、「ライブラリ クラス」が複数の無関係なことを行う場合は、おそらく複数のクラス (タスクごとに 1 つ) に分割する必要があります。

于 2012-07-27T15:39:20.450 に答える
3

is-a関係があるextends場合にのみ使用してください。したがって、私のメイン クラスは MyLibrary であるか、または私のクラスMyLibrary が必要かを考えることができます。

説明された問題から、MyLibrary を使用することが最善の方法であるように思えます。

于 2012-07-27T15:40:05.793 に答える
0

使用しているだけで変更できない場合は、 Code-GuruMyLibraryによってすでに提案されているように、すべてをシングルトンにするラッパーを使用する必要があります。

public class MyLibraryWrapper {
    private static MyLibrary instance = null;

    private MyLibraryWrapper() {}

    public static MyLibrary getInstance() {
        if (instance == null)
            instance = new MyLibrary();
        return instance;

したがって、コードでは次のように使用します

MyLibraryWrapper.getInstance().getSomething();
于 2012-07-27T15:54:45.953 に答える
0

提供された詳細が限られているため、Singleton patternを検討することをお勧めします。

extendsこれらは非常に密接に関連しているため、あるオブジェクトが別のオブジェクトの特性と機能を継承する必要がある場合にのみ使用してください。たとえば、クラスがある場合は、 、、およびを作成するようShapeに拡張します。継承を使用する前に、継承について、また継承を使用すべき場合と使用すべきでない場合についてさらに学習する必要があります。ShapeCircleSquareTriangleextends

于 2012-07-27T15:41:26.450 に答える
0

これを使用するstaticクラスにします。math クラスのjavas MATH クラスAPI に似ています。クラスのオブジェクトを作成せずに、クラスのメソッドを使用することができます。

于 2012-07-27T15:41:31.660 に答える
0

あなたのクラスがユーティリティ関数を実行する場合、すべてのメソッドをとしてマークし、次のstaticような操作を使用する必要があります

MyLibrary.doSomething();
MyLibrary.createSomething();
MyLibrary.getSomething();

ただし、これでは一部のデータ メンバーをクラスに保持することはできません。それらを保持すると、それらも静的になります。

それはあなたのケースには合わないと思いextendsます。

また、オブジェクトだけを保持したい場合は、Singletonインスタンスを 1 つだけ作成できるクラスを確認する必要があります。

于 2012-07-27T15:42:24.307 に答える
0

Java 1.5 以降でシングルトンを作成する最善の方法は、ENUM を使用することです。

public enum Test { 
    INSTANCE;
}

INSTANCE は Test クラスの唯一のインスタンスです。

于 2012-07-27T18:09:46.247 に答える