我今天在阅读Accelerated
GWT(Gupta)第151页时
遇到了这段代码。
public static void getListOfBooks(String category, BookStore bookStore) {
serviceInstance.getBooks(category, bookStore.new BookListUpdaterCallback());
}
public static void storeOrder(List books, String userName, BookStore bookStore) {
serviceInstance.storeOrder(books, userName, bookStore.new StoreOrderCallback());
}
那些新运营商在那里做什么?我从未见过这样的语法,有人可以解释吗?
有人知道在Java规范中的哪里可以找到它吗?
它们是 内部 (嵌套的非静态)类:
public class Outer {
public class Inner { public void foo() { ... } }
}
你可以做:
Outer outer = new Outer();
outer.new Inner().foo();
或者简单地:
new Outer().new Inner().foo();
这样做的原因是Inner
引用了外部类的特定实例。让我给你一个更详细的例子:
public class Outer {
private final String message;
Outer(String message) {
this.message = message;
}
public class Inner {
private final String message;
public Inner(String message) {
this.message = message;
}
public void foo() {
System.out.printf("%s %s%n", Outer.this.message, message);
}
}
}
并运行:
new Outer("Hello").new Inner("World").foo();
输出:
Hello World
注意: 嵌套类也可以static
。如果是这样,则它们没有this
对外部类的隐式引用:
public class Outer {
public static class Nested {
public void foo() { System.out.println("Foo"); }
}
}
new Outer.Nested.foo();
静态嵌套类经常private
会成为实现细节,并且是封装问题的一部分而又不污染公共名称空间的一种巧妙方法,通常如此。
问题内容: Java中是否有指数运算符? 例如,如果提示用户输入两个数字,然后他们输入和,则正确答案为。 问题答案: 要通过用户输入执行此操作:
问题内容: 我正在尝试调试Java中涉及ClassCastException的问题。为了解决该问题,我需要知道从Object转换为特定类型时发生了什么。 谁能向我解释Java Cast操作符如何在Java级别和JVM级别工作? 问题答案: JLS是否足够好? 强制转换将应用于强制转换操作符的操作数(第15.16节):操作数表达式的类型必须转换为强制转换操作符显式命名的类型。铸造上下文允许使用: 身
问题内容: 我正在尝试了解轮班经营者,但收获不多。当我尝试执行以下代码时 我得到以下 有人可以解释一下吗? 问题答案: 将二进制2()向左移动11次。因此:1000000000000 将二进制2()向左移动22次。因此: 现在,int为4字节,因此为32位。因此,当你偏移33时,它等效于偏移1。因此:100
我正在尝试使用全局参数实现运算符new。如果new With args被重载没有问题,但是我在尝试编译时遇到以下错误 C:\bjarne_experise_6.cpp(14):错误C2084:函数“void*operator new(size_t,void*)throw()”已具有正文C:\Program Files\Microsoft visual studio 10.0\vc\include\
我最近在业余时间学习了不同的算法,我遇到的一个看起来非常有趣的算法叫做超级日志算法——它估计一个列表中有多少独特的项目。 这对我来说特别有趣,因为它让我回到了我的MySQL时代,那时我看到了“基数”值(直到最近我一直认为它是计算出来的,不是估计出来的)。 所以我知道如何用O(n)编写一个算法,计算数组中有多少个唯一项。我是用JavaScript写的: 但问题是,我的算法虽然是O(n),但使用了大量
问题内容: 据我所知,操作员会执行以下操作:(如果我错了,请纠正我。) 分配内存,然后返回分配的内存的第一个块的引用。(显然,内存是从堆分配的。) 初始化对象(调用构造函数。) 运算符也以类似的方式工作,只是它对数组中的每个元素都执行此操作。 谁能告诉我这两个运算符在C ++和Java中有何不同: 就其生命周期而言。 如果他们无法分配内存怎么办。 问题答案: 在C ++中,… 对于类型的对象分配足