2

我可能错了,因为我对 Java 没有太多经验,但这里有一个问题。

我有一个包含许多方法的类(基本上它是一个简单的库)。

我创建了这个类的一个对象让我们说MyLibrary obj = new MyLibrary(parameters);

这些参数为库正确运行设置了任何必要的功能。

然后我可以打电话obj.getSomething//obj.setSomething等等obj.createSomething等等...

在我的主课中,我真的只需要一个这种库对象。

现在...不将它用作对象对我来说是否更有用,而是将其作为extends然后在库中创建一个函数,就像我会手动调用的构造函数一样?


编辑:

一类与MyLibrary 的关系非常密切。基本上,我有很多类做类似的事情,但有一些不同的更高层功能。所以我分离了必须在所有这些类中的方法。

它似乎与shapeclass 和triangle, circle, squareexample 非常相似。所以MyLibrary类似于shape包含所有基础的。

4

8 回答 8

5

您所描述的非常类似于实用程序类,类似于 Java 的Collections. 该类只有static方法和一个私有构造函数来防止实例化。这是 Java 中众所周知的惯用模式 - 您可以使用它来创建自己的方法组,以提供相关功能。

您根本不应该扩展甚至实例化实用程序类。从 Java-5 开始,您可以静态导入它们,这样您就可以使用它们的方法而无需显式引用它们的类。

于 2012-07-27T15:39:01.260 回答
3

extends当您需要继承层次结构时使用。将您的代码放在两个单独的类中似乎更合乎逻辑,就像您现在拥有它一样。

此外,如果您的“库类”做了多个不相关的事情,它可能应该分成多个类 - 每个任务一个。

于 2012-07-27T15:39:20.450 回答
3

你真的应该只extends在你有is-a关系时使用。所以,你可以想,我的主类MyLibrary 还是我的类应该一个 MyLibrary。

从您描述的问题来看,听起来 MyLibrary 是要走的路。

于 2012-07-27T15:40:05.793 回答
0

由于您提供的细节有限,您可能需要考虑Singleton 模式

extends只应在一个对象需要继承另一个对象的特性和功能时使用,因为它们非常密切相关。例如,如果您有一个Shape类,那么您将扩展Shape为 create CircleSquareTriangle。在使用之前,extends您应该了解更多关于继承以及何时应该使用和不应该使用它的信息。

于 2012-07-27T15:41:26.450 回答
0

我会把它作为一个static类来使用。类似于数学类的 javas MATH 类API。您可以只使用该类的方法而不创建它的对象。

于 2012-07-27T15:41:31.660 回答
0

好吧,如果您的课程执行实用功能,那么您应该将所有方法标记为static并使用类似的操作

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

但这不允许您在类中保留一些数据成员,如果您保留它们,它们也将是静态的。

我认为这不extends适合你的情况。

此外,如果您只想保留一个对象,那么您应该查看Singleton只能为其创建一个实例的 A 类。

于 2012-07-27T15:42:24.307 回答
0

假设您只是在使用MyLibrary并且可能不会更改它,您应该使用使整个事物成为 Singleton 的包装器,正如Code-Guru已经提出的那样。

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

在 java 1.5 或更高版本中创建单例的最佳方法是使用 ENUM。

public enum Test { 
    INSTANCE;
}

INSTANCE 是 Test 类的唯一实例。

于 2012-07-27T18:09:46.247 回答