void
的javadoc表示:
Void类是一个不可实例化的占位符类,用于保存对表示Java关键字Void的类对象的引用。
但构造函数只是:
private Void() {}
并且此代码实例化void
:
Constructor<Void> c = Void.class.getDeclaredConstructor();
c.setAccessible(true);
Void v = c.newInstance(); // Hello sailor
是否有一种方法使void
真正不可实例化?
使您的构造函数私有,并且没有任何其他可由外部访问的构造函数,会使类不可实例化。
但是,您无法避免使用反射API
访问它。使用反射,你可以做,什么是不允许的,通常。
但是,如果您真的希望您的类是不可实例化的,即使是通过反射,您也可以抛出
构造函数中的未检查异常。
private MyClass() {
throw UnsupportedOperationException("Can't instantiate class");
}
在这种情况下,当您使用构造函数#newInstance()
方法创建实例时,它将抛出一个InvocationTargetException
,正如@Alex的注释中引用的那样。
下面是构造函数#newInstance()
方法的文档,它声明了一个要抛出的异常列表,其中之一是InvocationTargetException
,它说:-
抛出:
InvocationTargetException-如果基础构造函数抛出异常。
我已经开始使用Kotlin作为java的替代品,并且非常喜欢它。然而,如果不跳回java领域,我就无法找到解决方案: 我有一个
我有一个没有扩展可串行化或可外部化接口的类,但在netbeans中使用FindBugs时仍然会遇到错误。有人能告诉我如何解决这个问题吗? 这是我的课 FindBug中的Bug:类分析器定义了一个非瞬时的非序列化实例字段objAnalyzerVar,对于objAnalyzerDataTypeInfo也是如此;
问题内容: 我一直在学习如何使用。 我知道如果我创建一个具有不同变量的类“ A”来实现并添加到类中,那么它也是。 但是,实际上是谁在实现这两种方法进行序列化?是否一切或不同类的重载他们的照顾时,有必要吗? 问题答案: 序列化实际上是在(和java.io.ObjectInputStream)及其一些帮助器类中实现的。在许多情况下,这种内置支持就足够了,开发人员只需要实现marker接口。该接口称为“
考虑以下代码: 现在扩展了一个实现接口的类。类和是带有一堆getter和setter的POJOS。FindBugs抱怨和字段说: 这个Serializable类定义了一个非基元实例字段,它既不是瞬态的、Serializable的,也不java.lang.Object的,并且似乎没有实现Externalizable接口或readObject()和WriteObject()方法。 好吧,所以一切都很好
4.2.真实世界的例子 我们要做的是一个Twitter应用。用户的需求很清楚,那就是发新消息、查看朋友的新消息,这也正是它的基本功能。除此之外,我们还需要事先获知用户的用户名和密码才能登录Twitter。由此可知,我们需要三个界面。 其次,我们希望应用程序能够流畅地运行,而回避开网络连接情况的影响。应用程序应该只在设备联网时抓取Twitter消息,并缓存到本地。为此,我们需要用到一个后台运行的Se
问题内容: 我需要这样做:将值更改侦听器更改为JTextField 我想Condemwnci的解决方案,但我得到的是错误的路线: 在我的情况是: 就我而言,我想更新Jtable中的行,所以我的方法将是这样的: 我在Linux ubuntu 11.10上使用Eclipse(如果有的话)。 编辑: 我不明白为什么,但是它可以通过以下方式工作: 然后改写Implements方法,而不是全部在同一行中完成