jjzjj

java - 外部基类的访问字段

在Java中,内部类通常可以访问外部类的私有(private)成员。在编写Android应用程序时,我有一个静态内部类扩展了它的外部类。事实证明,无法访问外部类的私有(private)字段:classOuter{privateintm_field=1;staticclassInnerextendsOuter{Inner(){m_field=2;}}}它给出了一个令人困惑的错误信息:error:non-staticvariablem_fieldcannotbereferencedfromastaticcontext即使除了类本身之外没有什么是静态的。当字段m_field被保护时,它编译没

java - Eclipse 和 javac 之间奇怪的编译器差异

以下代码片段(从实际代码中提取)在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

java - 如何让外部类继承内部类?

我怎样才能使这样的东西工作:classOuter{intsome_member;abstractclassInnerBase{abstractvoidmethod();}}classOuterExtendsInnerextendsOuter.InnerBase{OuterExtendsInner(Outero){o.super();}voidmethod(){//HowdoIusesome_memberhere?//WritingOuter.this.some_member->erroraboutOuternotbeinganenclosingclass//Writingjustsom

java - 调试 Java 时,如果在 IntelliJ IDEA 中变量的名称为 "this$0",这意味着什么?

我正在努力理解this通过运行test来实现功能性ReactiveJava库在Debug模式下调用testSendStream并在测试执行时单步执行代码。上面的快照显示有一个名为this$0的奇怪命名的变量。这个名字从何而来?这个名字是什么意思?为什么这个变量有这个名字?给它起这个名字的原因是什么?这个名字肯定不是代码本身来的,是IntelliJ或者javac/java生成的。但是为什么?如果我用标签MysteryObject标记这个对象,看看会发生什么也很有趣。 最佳答案 this$0是Inner类(非静态嵌套类)中的“隐藏字段”

java - 访问外部类的字段

在给定对内部类对象的引用的情况下,如何访问外部类的字段?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 - 为什么内部类的扩展会得到重复的外部类引用?

我有以下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

java - 设置内部类的日志级别(在 Glassfish 中)

我正在寻找一种方法来设置内部类的日志级别,假设我有以下类: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

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

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

java - 为什么类不能扩展其中出现的静态嵌套类?

这个类:publicclassOuterChildextendsOuterChild.InnerParent{publicstaticclassInnerParent{}}编译失败:$javacOuterChild.javaOuterChild.java:1:error:cyclicinheritanceinvolvingOuterChildpublicclassOuterChildextendsOuterChild.InnerParent{^1error因为OuterChild会“依赖于”自身,因为(根据§8.1.4"SuperclassesandSubclasses"ofTheJa

java - 从 JRuby 实例化一个非静态 Java 内部类

因此给定以下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