我最近看了一本书《TheJavaTutorials》第三版。如图所示,它讲的是内部类实现。在第3段中,它说“Stack类本身不应实现Iterator接口(interface),因为...”。我找不到Stack类不应该实现Iterator的任何理由。给出的原因并不普遍。你能解释一下吗? 最佳答案 从根本上说,迭代器是有状态的-它需要知道它在集合中指向的何处。这不属于集合本身的一部分——给出的解释是正确的……完全有可能有两个独立的迭代器对象,迭代同一个集合对象。如果集合本身实现了Iterator接口(interface),您将如何建模?
在给定外部类实例的情况下,对于内部类,是否有等效于StaticClass::new的东西?编辑:即如果我有classOuter{classInner{}}我可以做Outero=newOuter();旧Java中的Inneri=o.newInner()。如何将o.newInner()表示为函数引用。 最佳答案 根据Oracletutorials,有四种方法引用:引用静态方法ContainingClass::staticMethodName引用特定对象的实例方法containingObject::instanceMethodName引用
在下面显示的代码片段中,一个内部类继承了一个外部类本身。packagetest;classTestInnerClass{privateStringvalue;publicTestInnerClass(Stringvalue){this.value=value;}privateStringgetValue(){returnvalue;}publicvoidcallShowValue(){newInnerClass("Anothervalue").showValue();}privatefinalclassInnerClassextendsTestInnerClass{publicInne
我在网上做了一个小调查,并查看了该网站上的相关主题,但答案是矛盾的:有人说不可能,有人说可能,但很危险。目标是传递一个匿名类的对象作为RMI方法的参数。由于RMI要求,此类必须是可序列化的。没问题,很容易使类可序列化。但我们知道内部类的实例持有对外部类的引用(匿名类是内部类)。因此,当我们序列化内部类的实例时,外部类的实例和字段一起被序列化。这是问题出现的地方:外部类不可序列化,更重要的是-我不想序列化它。我想做的只是发送匿名类的实例。简单示例-这是一个RMI服务,其方法接受Runnable:publicinterfaceRPCService{Objectcall(Serializab
我想问你为什么我们需要内部类,为什么要使用它们?我知道如何使用内部类,但我不知道为什么.. 最佳答案 一些内部类是公开公开的(例如Java中的Map.Entry),但这是迄今为止的异常(exception)情况,而不是常态。内部类基本上是一个实现细节。例如,Swing广泛使用事件监听器的内部类。没有它们,您最终会用一堆您不需要看到的类污染全局命名空间(这可能会使它们的目的更难确定)。本质上,内部类是作用域的一种形式。包访问从包外部隐藏类。私有(private)内部类从该类外部隐藏该类。Java中的内部类也是缺少函数指针或方法委托(d
我正在阅读Java编程简介,它没有关于这个主题的很好解释,这让我想知道为什么有人应该在Java中使用私有(private)内部类而不是公共(public)内部类。它们都只能被外部类使用。 最佳答案 你的声明它们都只能被外部类使用。是错误的:publicclassA{privateclassB{}publicclassC{}publicCgetC(){returnnewC();}publicBgetB(){returnnewB();}}publicclassTryout{publicstaticvoidmain(String[]arg
我在为JUnit3从TestCase继承的Test类中定义内部类时遇到一些问题。场景如下:Foo.javapublicclassFoo{publicvoidmethod(){...}}FooTest.javapublicclassFooTestextendsTestCase{publicclassBarextendsFoo{publicvoidmethod(){...}}publicvoidtestMethod(){...}}现在,如果我从Eclipse运行它,测试运行正常,但如果我尝试从Ant任务运行,它会失败:[junit]junit.framework.AssertionFail
我有以下代码:publicclassOuter{publicInterfaceAnony{publicvoidcallback();}publicOuter(){OtherClass.foo(newAnony(){@Overridepublicvoidcallback(){....}});}}但是我friend告诉我里面有问题。我在Outer的构造函数中创建了一个匿名类实例,所以匿名类实例隐式引用了Outer类实例,即Outer.this。但是此时,Outer类实例还没有完全创建。因此,匿名类实例引用了一个状态不完整的对象,因此出现了问题。他说的对吗?谢谢。
我有一个枚举类,它包含一个Java内部类。例如(在实际代码中,有一些在枚举上声明的方法在内部使用了内部类):publicenumMyEnum{VALUE_1,VALUE_2;privatestaticclassMyInnerClass//isstatichereneededorcanitberemoved?{}}PMD告诉我不需要'static'修饰符(违反UnusedModifier规则)。这是正确的还是PMD错误?备注:Thisquestion不是重复的,它与我在这里问的相反。 最佳答案 static关键字不是多余的。您可以创建
我有一些代码为回调处理程序定义了一个匿名内部类。这个处理程序需要分配一个局部变量,见下文。我需要在回调中分配resp并在函数末尾引用它。然而,我在Eclipse中收到此错误:最终局部变量resp无法赋值,因为它是在封闭类型中定义的我该如何解决这个问题?DoorResultunlockDoor(finalLockableDoordoor){finalUnlockDoorResponseresp;finalbooleansent=sendRequest(newUnlockDoorRequest(door),newResponseAction(){publicvoidexecute(Sess