我有一个很简单的问题:
我想要一个Java类,该类提供一个公共静态方法,该方法可以执行某些操作。这只是出于封装目的(将所有重要的内容都放在一个单独的类中)…
此类不应被实例化或扩展。那让我写道:
final abstract class MyClass {
static void myMethod() {
...
}
... // More private methods and fields...
}
(尽管我知道,这是禁止的)。
我也知道,我可以使此类完全为final,并在将其私有化时覆盖标准构造函数。
但这在我看来更像是一种“解决方法”,应该更可能由最终的抽象类完成…
而且我讨厌解决方法。因此,仅出于我自己的利益:还有另一种更好的方法吗?
参考:有效的Java 2nd Edition,第4项“使用私有构造函数强制执行非示例性”
public final class MyClass { //final not required but clearly states intention
//private default constructor ==> can't be instantiated
//side effect: class is final because it can't be subclassed:
//super() can't be called from subclasses
private MyClass() {
throw new AssertionError()
}
//...
public static void doSomething() {}
}
我写JUnit测试有困难。问题是在下面的代码块中有最后一个方法: 是一个,它扩展了,后者是一个抽象类。 是中的最后一个方法。 这是我的Test类的浓缩版本: 我使用PowerMockito,因为我知道Mockito不能存根final方法。 我得到的错误是 在区域设置“EN_US”的代码“CONSTANT_STRING”下找不到消息。 看起来我的...实际上并没有被用作正在被调用。我尝试将添加到我创
问题内容: 为对象 声明关键字有什么用?例如: 问题答案: 使用“ final”关键字可使您声明的变量不变。最初分配后,将无法重新分配。 但是,这不一定意味着变量引用的实例状态是不可变的,仅引用本身是不可变的。 在变量上使用“ final”关键字有几个原因。一种是优化,通过将变量声明为final来允许值被记忆。 使用最终变量的另一种情况是方法中的内部类需要访问声明方法中的变量。以下代码说明了这一点
问题内容: 我想知道下面的代码是否有意义,因为编译器会警告“空白的最终字段对象可能尚未初始化”。有更好的方法吗? 问题答案: 我将字段定为final,并强制构造函数将值向上传递:
Java 语言提供了两种类,分别为具体类和抽象类。前面学习接触的类都是具体类。这一节介绍一下抽象类。 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,那么这样的类称为 抽象类。 在 Java 中抽象类的语法格式如下: 其中,abstract 表示该类或该方法是抽象的;class_name 表示抽象类
本小节我们将学习 Java 中的抽象类,你将了解到抽象类的概念和特点,抽象类在程序设计时的应用场景,什么是抽象方法,抽象方法有什么特点,如何声明一个抽象方法等内容。 1. 概念和特点 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 值得注意的是,一个抽象类不能直接实例化,但类的
问题内容: 我对Java中的抽象有点困惑。 我检查了许多页面,指出抽象是数据隐藏(隐藏实现)。 我对抽象的理解是“部分实现”。只需在抽象类/接口中定义所需的内容,然后扩展/实现它们并添加您自己的功能即可。 我不明白这是怎么隐藏数据的?实现类/接口后,您将可以访问代码,并将根据需要对其进行修改。 我已经检查了许多问题,关于此的文章,但对此仍然感到困惑。 任何帮助表示赞赏。谢谢。 问题答案: 也许有一