我没有想到在这个阶段我会再遇到Java根本上没有的新语法,但是瞧,我只是遇到了一些东西:
确切的上下文和下面的代码应该做什么无关紧要-只是为了提供某种上下文。
我试图在IT Mill Toolkit中综合创建一个事件,所以我写了这样的话:
buttonClick(new Button.ClickEvent(button));
但是,Eclipse给了我以下错误消息:
无法访问Button类型的封闭实例。必须使用一个封闭的类型为Button的实例来限定分配(例如xxnew A(),其中x是Button的实例)。
当我如下重写上面的行时,它不再抱怨:
buttonClick(button.new ClickEvent(button)); // button instanceof Button
所以,我的问题是: 后一种语法到底 是 什么意思,为什么第一个片段不起作用? Java在抱怨什么?在第二版中它在做什么?
背景信息:Button
和Button.ClickEvent
均为非html" target="_blank">抽象公共类。
内部类(如Button.ClickEvent
)需要引用外部类(Button
)的实例。
该语法会创建一个新的实例,Button.ClickEvent
其外部类引用设置为的值button
。
这是一个示例-忽略缺少封装等问题,仅用于演示目的:
class Outer
{
String name;
class Inner
{
void sayHi()
{
System.out.println("Outer name = " + name);
}
}
}
public class Test
{
public static void main(String[] args)
{
Outer outer = new Outer();
outer.name = "Fred";
Outer.Inner inner = outer.new Inner();
inner.sayHi();
}
}
有关内部类和封闭实例的更多信息,请参见规范的8.1.3节。
问题内容: 我有一个实用程序方法,当从中删除了不相关的逻辑时,简化的方法将如下所示: 问题是,如果是诸如的内部类,则该方法即使是公共方法也将不起作用,因为它将抛出。 有没有办法动态实例化内部类? 问题答案: 如果它是真正的 内部 类而不是 嵌套 (静态)类,则有一个隐式构造函数参数,它是对外部类实例的引用。在那个阶段您不能使用- 必须获得适当的构造函数。这是一个例子:
这是个模糊的问题。因此,请随时询问任何具体数据。 我们有一个tomcat服务器,运行两个web服务。一个tomcat使用spring构建。90%的任务使用mysql,JSON缓存使用mongo(10%)。另一个web服务是使用grails编写的。这两项服务都是中等大小的代码库(每项约35k行代码) 计算仅在有HTTP请求(无批处理)时发生。每个请求大约有2000个数据库点击率(我知道它非常庞大,我
问题内容: 是否可以使用Java反射从另一个类实例化私有内部类。例如,如果我采用了这段代码 是否可以实例化并从main类中的main方法获得对Test的访问。 问题答案: 使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。 例:
是否可以从类main中的main方法实例化并获得对Test的访问。
问题内容: 在分析这里最近一个问题的结果时,我遇到了一个非常奇怪的现象:显然HotSpot的JIT优化的额外一层实际上减慢了我的计算机的执行速度。 这是我用于测量的代码: 该代码非常微妙,所以让我指出一些重要的方面: “普通索引”变体使用直接变量作为数组索引。HotSpot可以轻松确定整个循环的范围并消除数组边界检查; by的“ masked index”变体索引实际上等于,但是通过AND-mas
我已经阅读了以前关于这个问题的线程,但答案无法解决我的问题。我有一个BroadcastRecencer,它是Mainactive内部的一个内部类,但出现以下异常时失败: hread.java:5118RuntimeException:无法实例化接收器java.lang.reflect.Mainactive$数据库广播接收器:ethod.invoke实例化异常:无法实例化类java.lang.ref