在Java中,内部类通常可以访问外部类的私有(private)成员。在编写Android应用程序时,我有一个静态内部类扩展了它的外部类。事实证明,无法访问外部类的私有(private)字段:classOuter{privateintm_field=1;staticclassInnerextendsOuter{Inner(){m_field=2;}}}它给出了一个令人困惑的错误信息:error:non-staticvariablem_fieldcannotbereferencedfromastaticcontext即使除了类本身之外没有什么是静态的。当字段m_field被保护时,它编译没
以下代码片段(从实际代码中提取)在Eclipse中编译和运行。package1/Outer.java:packagepackage1;importpackage1.Outer.Mid.Inner;importpackage2.Bar;publicclassOuter{finalMidmid=newMid();publicOuter(){mid.setInner(newInner(){@Overridepublicvoidfoo(){System.out.println("InOuter.foo()");}});}publicstaticclassMidimplementsBar{pri
我怎样才能使这样的东西工作:classOuter{intsome_member;abstractclassInnerBase{abstractvoidmethod();}}classOuterExtendsInnerextendsOuter.InnerBase{OuterExtendsInner(Outero){o.super();}voidmethod(){//HowdoIusesome_memberhere?//WritingOuter.this.some_member->erroraboutOuternotbeinganenclosingclass//Writingjustsom
我正在努力理解this通过运行test来实现功能性ReactiveJava库在Debug模式下调用testSendStream并在测试执行时单步执行代码。上面的快照显示有一个名为this$0的奇怪命名的变量。这个名字从何而来?这个名字是什么意思?为什么这个变量有这个名字?给它起这个名字的原因是什么?这个名字肯定不是代码本身来的,是IntelliJ或者javac/java生成的。但是为什么?如果我用标签MysteryObject标记这个对象,看看会发生什么也很有趣。 最佳答案 this$0是Inner类(非静态嵌套类)中的“隐藏字段”
在给定对内部类对象的引用的情况下,如何访问外部类的字段?classOuter{intfield;classInner{voidmethod(Innerparameter){//workingonthecurrentinstanceiseasy:)field=0;Outer.this.field=1;//workingonanotherinstanceishard:(parameter.field=2;//doesnotcompileparameter.Outer.this.field=3;//doesnotcompileparameter.outer().field=4;//Thisw
我有以下Java文件:classOuter{classInner{publicintfoo;}classInnerChildextendsInner{}}我使用这个命令编译然后反汇编文件:javactest.java&&javap-p-cOuterOuter.InnerOuter.InnerChild这是输出:Compiledfrom"test.java"classOuter{Outer();Code:0:aload_01:invokespecial#1//Methodjava/lang/Object."":()V4:return}Compiledfrom"test.java"clas
我正在寻找一种方法来设置内部类的日志级别,假设我有以下类:packagemypackage;classOuter{Innerinner=newInner();publicvoidlogSomething(){Logger.getLogger(Outer.class.getName()).log(Level.FINE,"I'malive!");inner.logSomething();}classInner{publicvoidlogSomething(){Logger.getLogger(Inner.class.getName()).log(Level.FINE,"I'maliveto
我有以下代码:publicclassOuter{publicInterfaceAnony{publicvoidcallback();}publicOuter(){OtherClass.foo(newAnony(){@Overridepublicvoidcallback(){....}});}}但是我friend告诉我里面有问题。我在Outer的构造函数中创建了一个匿名类实例,所以匿名类实例隐式引用了Outer类实例,即Outer.this。但是此时,Outer类实例还没有完全创建。因此,匿名类实例引用了一个状态不完整的对象,因此出现了问题。他说的对吗?谢谢。
这个类:publicclassOuterChildextendsOuterChild.InnerParent{publicstaticclassInnerParent{}}编译失败:$javacOuterChild.javaOuterChild.java:1:error:cyclicinheritanceinvolvingOuterChildpublicclassOuterChildextendsOuterChild.InnerParent{^1error因为OuterChild会“依赖于”自身,因为(根据§8.1.4"SuperclassesandSubclasses"ofTheJa
因此给定以下java类:classOuter{privateintx;publicOuter(intx){this.x=x;}publicclassInner{privateinty;publicInner(inty){this.y=y;}publicintsum(){returnx+y;}}}我可以通过以下方式从Java创建内部类的实例:Outero=newOuter(1);Outer.Inneri=o.newInner(2);但是,我似乎无法从JRuby做同样的事情#!/usr/bin/envjrubyrequire'java'java_import'Outer'o=Outer.n