草庐IT

java - 为什么java Iterator接口(interface)应该实现为内部类?

我最近看了一本书《TheJavaTutorials》第三版。如图所示,它讲的是内部类实现。在第3段中,它说“Stack类本身不应实现Iterator接口(interface),因为...”。我找不到Stack类不应该实现Iterator的任何理由。给出的原因并不普遍。你能解释一下吗? 最佳答案 从根本上说,迭代器是有状态的-它需要知道它在集合中指向的何处。这不属于集合本身的一部分——给出的解释是正确的……完全有可能有两个独立的迭代器对象,迭代同一个集合对象。如果集合本身实现了Iterator接口(interface),您将如何建模?

java - (非静态)内部类的构造方法引用?

在给定外部类实例的情况下,对于内部类,是否有等效于StaticClass::new的东西?编辑:即如果我有classOuter{classInner{}}我可以做Outero=newOuter();旧Java中的Inneri=o.newInner()。如何将o.newInner()表示为函数引用。 最佳答案 根据Oracletutorials,有四种方法引用:引用静态方法ContainingClass::staticMethodName引用特定对象的实例方法containingObject::instanceMethodName引用

java - 从扩展外部类本身的内部类中访问外部类成员

在下面显示的代码片段中,一个内部类继承了一个外部类本身。packagetest;classTestInnerClass{privateStringvalue;publicTestInnerClass(Stringvalue){this.value=value;}privateStringgetValue(){returnvalue;}publicvoidcallShowValue(){newInnerClass("Anothervalue").showValue();}privatefinalclassInnerClassextendsTestInnerClass{publicInne

java - 是否可以在没有外部类的情况下序列化匿名类?

我在网上做了一个小调查,并查看了该网站上的相关主题,但答案是矛盾的:有人说不可能,有人说可能,但很危险。目标是传递一个匿名类的对象作为RMI方法的参数。由于RMI要求,此类必须是可序列化的。没问题,很容易使类可序列化。但我们知道内部类的实例持有对外部类的引用(匿名类是内部类)。因此,当我们序列化内部类的实例时,外部类的实例和字段一起被序列化。这是问题出现的地方:外部类不可序列化,更重要的是-我不想序列化它。我想做的只是发送匿名类的实例。简单示例-这是一个RMI服务,其方法接受Runnable:publicinterfaceRPCService{Objectcall(Serializab

c# - 为什么我们使用内部类?

我想问你为什么我们需要内部类,为什么要使用它们?我知道如何使用内部类,但我不知道为什么.. 最佳答案 一些内部类是公开公开的(例如Java中的Map.Entry),但这是迄今为止的异常(exception)情况,而不是常态。内部类基本上是一个实现细节。例如,Swing广泛使用事件监听器的内部类。没有它们,您最终会用一堆您不需要看到的类污染全局命名空间(这可能会使它们的目的更难确定)。本质上,内部类是作用域的一种形式。包访问从包外部隐藏类。私有(private)内部类从该类外部隐藏该类。Java中的内部类也是缺少函数指针或方法委托(d

java - Java 中的公共(public)内部类与私有(private)内部类

我正在阅读Java编程简介,它没有关于这个主题的很好解释,这让我想知道为什么有人应该在Java中使用私有(private)内部类而不是公共(public)内部类。它们都只能被外部类使用。 最佳答案 你的声明它们都只能被外部类使用。是错误的:publicclassA{privateclassB{}publicclassC{}publicCgetC(){returnnewC();}publicBgetB(){returnnewB();}}publicclassTryout{publicstaticvoidmain(String[]arg

java - 在 JUnit 的测试类中定义内部类时出错

我在为JUnit3从TestCase继承的Test类中定义内部类时遇到一些问题。场景如下:Foo.javapublicclassFoo{publicvoidmethod(){...}}FooTest.javapublicclassFooTestextendsTestCase{publicclassBarextendsFoo{publicvoidmethod(){...}}publicvoidtestMethod(){...}}现在,如果我从Eclipse运行它,测试运行正常,但如果我尝试从Ant任务运行,它会失败:[junit]junit.framework.AssertionFail

java - 我可以在外部类的构造函数中实例化一个匿名类吗?

我有以下代码:publicclassOuter{publicInterfaceAnony{publicvoidcallback();}publicOuter(){OtherClass.foo(newAnony(){@Overridepublicvoidcallback(){....}});}}但是我friend告诉我里面有问题。我在Outer的构造函数中创建了一个匿名类实例,所以匿名类实例隐式引用了Outer类实例,即Outer.this。但是此时,Outer类实例还没有完全创建。因此,匿名类实例引用了一个状态不完整的对象,因此出现了问题。他说的对吗?谢谢。

java - 枚举中的内部类在 Java 中总是静态的吗?

我有一个枚举类,它包含一个Java内部类。例如(在实际代码中,有一些在枚举上声明的方法在内部使用了内部类):publicenumMyEnum{VALUE_1,VALUE_2;privatestaticclassMyInnerClass//isstatichereneededorcanitberemoved?{}}PMD告诉我不需要'static'修饰符(违反UnusedModifier规则)。这是正确的还是PMD错误?备注:Thisquestion不是重复的,它与我在这里问的相反。 最佳答案 static关键字不是多余的。您可以创建

java - 从内部类访问变量

我有一些代码为回调处理程序定义了一个匿名内部类。这个处理程序需要分配一个局部变量,见下文。我需要在回调中分配resp并在函数末尾引用它。然而,我在Eclipse中收到此错误:最终局部变量resp无法赋值,因为它是在封闭类型中定义的我该如何解决这个问题?DoorResultunlockDoor(finalLockableDoordoor){finalUnlockDoorResponseresp;finalbooleansent=sendRequest(newUnlockDoorRequest(door),newResponseAction(){publicvoidexecute(Sess