我可能错了,因为我没有太多的Java经验,但这是一个问题。
我有一个包含许多方法的类(基本上它是一个简单的库)。
我创建了这个类的对象,让我们说MyLibrary obj = new MyLibrary(parameters);
这些参数设置了库正确运行所需的任何功能。
然后我可以致电obj.getSomething
/ obj.setSomething
/ obj.createSomething
等等......
在我的主类中,我真的只需要一个这样的库对象。
现在......对于我来说,不要将它作为一个对象使用它会更有用,但是把它作为extends
,然后在库中创建一个函数,就像我会手动调用的构造函数一样? / p>
修改
一个类和MyLibrary之间的关系非常接近。基本上,我有很多类做类似的事情,但有一些不同的更高层功能。所以我分开了必须在所有这些类中的方法。
它似乎与shape
类和triangle
,circle
,square
示例非常相似。因此MyLibrary
类似于包含所有基础的shape
。
答案 0 :(得分:5)
您所描述的内容非常类似于实用程序类,类似于Java的Collections
。该类只有static
个方法,以及一个私有构造函数来防止实例化。这是Java中一个众所周知的惯用模式 - 您可以使用它来创建自己的方法组,提供相关的功能。
您根本不应扩展或甚至实例化实用程序类。从Java-5开始,您可以静态导入它们,以便您可以使用它们的方法,而无需明确引用它们的类。
答案 1 :(得分:3)
extends
。将代码放在两个单独的类中似乎更合乎逻辑,就像现在一样。
另外,如果你的“库类”做了多个不相关的事情,它应该被分成多个类 - 每个任务一个。
答案 2 :(得分:3)
当你有一个是-a 的关系时,你应该只使用extends
。所以,您可以认为,是我的主要课程是MyLibrary,还是我的班级 是MyLibrary。
根据您描述的问题,听起来好像是MyLibrary。
答案 3 :(得分:0)
由于您提供的详细信息有限,您可能需要考虑Singleton pattern。
extends
只应在一个对象需要继承另一个对象的特性和功能时使用,因为它们密切相关。例如,如果您有一个Shape
类,那么您可以将Shape
扩展为创建Circle
,Square
和Triangle
。在使用extends
之前,您应该了解有关遗产的更多信息,以及何时应该和不应该使用遗产。
答案 4 :(得分:0)
我会将其设为static
类。与java的MATH类API for math class类似。您可以只使用类的方法而不创建它的对象。
答案 5 :(得分:0)
那么如果您的类执行实用程序功能,那么您应该将所有方法标记为static
并使用
MyLibrary.doSomething();
MyLibrary.createSomething();
MyLibrary.getSomething();
但是这不允许你在课堂上保留一些数据成员,如果你保留它们,它们也会是静态的。
我不认为extends
适合你的情况。
此外,如果您只想保留一个对象,那么您应该查看Singleton
一个只能创建一个实例的类。
答案 6 :(得分: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();
答案 7 :(得分:0)
在java 1.5或更高版本中创建单例的最佳方法是使用ENUM。
public enum Test {
INSTANCE;
}
INSTANCE是Test类的唯一实例。