标签: inner-classes

为什么内部类可以访问私有方法?

我不明白为什么这会编译.f()和g()在内部类中是可见的,尽管是私有的.他们是特殊的,因为他们是内部阶级?

如果A和B不是静态类,它仍然是相同的.

class NotPrivate {
    private static class A {
        private void f() {
            new B().g();
        }
    }

    private static class B {
        private void g() {
            new A().f();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java inner-classes

28
推荐指数
2
解决办法
1万
查看次数

接口与类中的内部类

这两个内部类声明有什么区别?还评论优点/缺点?

案例A:类中的类.

public class Levels {   
  static public class Items {
    public String value;
    public String path;

    public String getValue() {
      return value;}
  }
}
Run Code Online (Sandbox Code Playgroud)

和案例B:接口内的类.

public interface Levels{

  public class Items {
    public String value;
    public String path;

    public String getValue() {
      return value;}
  }
}
Run Code Online (Sandbox Code Playgroud)

纠正:放置getvalue方法.

进一步的信息:我能够在另一个没有实现接口AT ALL的类中实例化A和B两种情况下的Items类.

public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
 Levels.Items items = new Levels.Items();
}
Run Code Online (Sandbox Code Playgroud)

由于接口未实例化,因此接口内的所有元素都可以通过点符号访问,而无需实例化LEVELS接口,因为您无法实例化接口 - 有效地在可渗透静态引用的接口内定义类.

所以说B案例中的Items类不是静态的没有意义.由于情况A和B都以相同的方式实例化,我不是在寻找静态或内部或嵌套的语义.停止给我关于语义的答案.我想要编译器,运行时和行为差异/优点,或者如果没有,那么就这么说.没有更多的语义答案请!!!!! JVM或.NET VM规范的专家请求这个答案问题,而不是教科书语义学.

java nested-class inner-classes static-class

28
推荐指数
4
解决办法
4万
查看次数

事件监听器中的内存泄漏

我已经阅读了文章http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html.在本文中,建议使用带有WeakReference的静态内部类.许多内部类用于事件侦听器.那些内部类也会导致内存泄漏吗?那些内在阶级应该是静态的吗?

static android memory-leaks event-listener inner-classes

28
推荐指数
1
解决办法
1万
查看次数

在C#中使用内部类

关于C#中内部类的使用和结构的最佳实践是什么?

例如,如果我有一个非常大的基类和两个大的内部类,我应该将它们分成单独的(部分类)代码文件,还是将它们作为一个非常大的笨重的代码文件?

具有抽象类的公共继承内部类也是不好的做法吗?

c# inner-classes

27
推荐指数
5
解决办法
5万
查看次数

"创建对象时,无法从静态上下文引用非静态变量"

我编写了下面的代码来测试Java中的类和对象的概念.

public class ShowBike {
    private class Bicycle {
        public int gear = 0;
        public Bicycle(int v) {
            gear = v;
        }
    }

    public static void main() {
        Bicycle bike = new Bicycle(5);
        System.out.println(bike.gear);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这会在编译过程中给出以下错误?

ShowBike.java:12: non-static variable this cannot be referenced from a static context
        Bicycle bike = new Bicycle(5);
                       ^
Run Code Online (Sandbox Code Playgroud)

java oop inner-classes

27
推荐指数
2
解决办法
7万
查看次数

引用非最终变量:为什么这段代码会编译?

首先,如果这是一个重复的问题,我道歉.我找到了许多类似的,但没有一个直接解决我的问题.

为准备即将到来的考试,我正在做一篇过去的论文.它有一个提供代码段的问题.我们必须声明它是否编译,如果不编译,则写入发生第一个编译器错误的行并解释它.这是片段:

public static void main(String[] args) {
    JFrame f = new JFrame("hi");
    JTextField jtf = new JTextField(50);

    jtf.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseMoved(MouseEvent evt) {
            jtf.setText(evt.getLocationOnScreen().toString());
        }
    });

    f.add(jtf);
    f.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

我期待它不要编译,因为jtf不是final.我通过在Eclipse中输入上面的代码测试了我的理论,它标记了预期的错误,但编译并运行得很好.只有在鼠标停留之后JTextField我才得到预期的错误:

java.lang.Error:未解决的编译问题:无法引用封闭范围中定义的非最终局部变量jtf

我做了一些搜索,发现Eclipse使用自己的Java编译器版本.所以我在Eclipse之外重新创建了文件,并通过命令行编译/运行它.它编译时没有错误或警告,当鼠标悬停在文本字段上时,显示所需的内容java.awt.Point[x=...,y=...].

我对匿名内部类的理解是他们可以访问:

  • 封闭类的字段
  • 封闭类的方法
  • 封闭范围的局部变量,只要它们是 final

那我错过了什么?根据我的知识,这段代码不应该工作.

java inner-classes java-8

27
推荐指数
2
解决办法
1982
查看次数

有没有办法在C#中获取内部类的列表?

根据标题.我想要一个给定类的所有内部类的列表,它可以是一个名称列表或一个类型列表 - 我不感兴趣.这可能吗?我认为可能有一种方法使用反射但是却找不到反射.

非常感谢,托马斯

.net c# reflection inner-classes

26
推荐指数
3
解决办法
9717
查看次数

如何从匿名内部类调用特定的父构造函数?

好的,所以我知道匿名内部类要么隐式扩展父类,要么实现接口,因此需要调用超类的构造函数.但是,我不确定如何为匿名类创建构造函数(如果这是可能的)并且没有定义构造函数我不知道如何调用super()!这是我的练习代码:

public class AnonymousConstructor {
    public static void main(String[] args) {
        //I'm not sure how to explicitly call one of the arg super constructors
        MyBob my = new MyBob() {
            //I would like to do something like this super("String"); or      
            //super("String", "String");
        };

    }
}

class MyBob extends Thread {
    MyBob() {
        System.out.println("No arg constructor");
    }
    MyBob(String a) {
        System.out.println("Arg constructor");
    }
    MyBob(String a, String b) {
        System.out.println("2 arg constructor");
    }
    public void run() {
        System.out.println("Outer");
    }
}
Run Code Online (Sandbox Code Playgroud)

我担心的是,如果你试图从一个没有no-arg构造函数的类创建一个匿名类,那么代码将在编译时失败,因为没有办法将参数传递给superconstructor.这是一个有效的问题,如果是这样,有没有办法解决这个问题?

java constructor scjp inner-classes

26
推荐指数
2
解决办法
4756
查看次数

在(*)中可以访问多少个不同版本的'x'?

这是一个用于理解Java中内部类的工作的训练练习.正如问题所述,x可以访问多少个不同版本(*)

class Outer {
    int x;

    class Inner extends Outer {
        int x;

        void f(int x) {
            (*)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我倾向于认为,有3个,分别为:this.x,super.xx但有些我的同龄人似乎认为有4个.

我们哪个人很困惑?你能解释一下吗?

java inner-classes

26
推荐指数
2
解决办法
681
查看次数

Java停止了内部类中非final变量的错误(java 8)

Java 7在下面的代码中说"不能引用封闭范围中定义的非最终局部变量消息":

public class Runner {   
    public static void main(String[] args) {

        String message = "Hello world";

        new Runnable() {
            @Override
            public void run() {
                System.out.println(message);
            }
        }.run();
    }
}
Run Code Online (Sandbox Code Playgroud)

Java 8没有.

怀疑这是关于向Java添加函数编程功能.

它是否同样处理代码?

java inner-classes java-8

25
推荐指数
2
解决办法
5274
查看次数