Tag: 内部类

从当前外部类对象实例化内部类对象

我想知道以下是否在Java中有效: class OuterClass { OuterClass(param1, param2) { …some initialization code… } void do { // Here is where the doubt lays OuterClass.InnerClass ic = this.new InnerClass(); } class InnerClass { } } 基本上我在这里想要实现的是从外部类的当前实例实例化内部类对象,而不是新实例,即当前实例。 我相信这很方便,因为外部类的构造函数不是空的(接受参数)而我们不知道传递给它们的是什么(它们不能为null,因为有些可能被分配给一个由内部类对象)。 如果我解释得很好,请告诉我。 提前致谢!

在范围内没有封闭类型的实例

我调查java内部类。 我写了一个例子: public class Outer { public Outer(int a){} public class Inner { public Inner(String str, Boolean b){} } public static class Nested extends Inner{ public static void m(){ System.out.println(“hello”); } public Nested(String str, Boolean b , Number nm) { super(“2”,true); } } public class InnerTest extends Nested{ public InnerTest(){ super(“str”,true,12); } } } 我使用以下字符串从main调用它: […]

访问java中内部类中的变量

我正在尝试创建一个JLabel数组,所有这些都应该在单击时隐藏。 当尝试通过需要访问用于声明标签的循环的迭代变量的内部类来设置鼠标侦听器时,会出现问题。 代码不言自明: for(int i=1; i<label.length; i++) { label[i] = new JLabel("label " + i); label[i].addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent me) { label[i].setVisible(false); // compilation error here } }); cpane.add(label[i]); } 我认为我可以通过使用this或者super而不是内部方法中的label[i]的调用来克服这一点但我无法弄明白。 编译错误是:从内部类中访问局部变量i; 需要宣布最终 我确信答案肯定是我没想过的傻事,或者我犯了一些小错误。 任何帮助,将不胜感激

方法本地内部类只能访问最终的局部变量。为什么?

可能重复: 为什么内部类需要“最终”外部实例变量[Java]? 为什么在匿名类中只能访问最终变量? class Outer{ private String x = “instance variable”; void doStuff(){ String z = “local variable”; class Inner{ public void seeOuter(){ System.out.println(“Outer x is : “+ x); System.out.println(“Local variable z is : ” + z); //won’t compile } } } } 将局部变量z标记为final可解决问题: final String z = “local variable”; //Now inner object can use […]

为什么可序列化的内部类不可序列化?

以下代码: public class TestInnerClass { public static void main(String[] args) throws IOException { new TestInnerClass().serializeInnerClass(); } private void serializeInnerClass() throws IOException { File file = new File(“test”); InnerClass inner = new InnerClass(); new ObjectOutputStream(new FileOutputStream(file)).writeObject(inner); } private class InnerClass implements Serializable { private static final long serialVersionUID = 1L; } } 抛出以下exception: Exception in thread […]

为什么我们使用内部类?

我想问你为什么我们需要内部类以及为什么要使用它们? 我知道如何使用内部类但我不知道为什么..

Java:私有内部类合成构造函数

我有一个Outer类,有一个private Inner类。 在我的Outer类方法中,我实例化Inner类,如下所示: Outer outer = new Outer(); Inner inner = outer.new Inner(); 编译器将此代码转换为: Outer outer = new Outer(); Inner inner = new Inner(outer, null); 使用reflection显示Inner类具有以下合成构造函数: private Outer$Inner(Outer) Outer$Inner(Outer,Outer$Inner) 由于Inner类是private ,编译器会将private构造函数添加到它,因此没有人可以实例化该类。 但显然Outer类应该能够实例化它,因此编译器会添加其他包私有构造函数,后者又调用私有构造函数。 此外,由于package-private构造函数在其名称中包含$ ,因此普通Java代码无法调用它。 问题:为什么要合成一个私有和一个包私有构造函数? 为什么不合成package-private构造函数并用它完成呢?

访问内部类中的外部类变量

在内部类中,可以访问外部类的变量,但不能访问方法的局部变量。 我理解关于方法的局部变量不可访问的部分,但我想知道为什么外部类变量是可访问的? 我的理解是,当一个内部类与外部类绑定时,只要父类可用,子进程就可以访问它的父变量。 我对么?

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

在下面显示的代码片段中,内部类inheritance外部类本身。 package test; class TestInnerClass { private String value; public TestInnerClass(String value) { this.value = value; } private String getValue() { return value; } public void callShowValue() { new InnerClass(“Another value”).showValue(); } private final class InnerClass extends TestInnerClass { public InnerClass(String value) { super(value); } public void showValue() { System.out.println(getValue()); System.out.println(value); } } } public […]

我可以使用一些语法访问匿名内部类中的新方法吗?

是否有任何Java语法来访问外部类中匿名内部类中定义的新方法? 我知道可以有各种变通方法,但我想知道是否存在特殊语法? 例如 class Outer { ActionListener listener = new ActionListener() { @Override void actionPerformed(ActionEvent e) { // do something } // method is public so can be accessible public void MyGloriousMethod() { // viva! } }; public void Caller() { listener.MyGloriousMethod(); // does not work! } } 我自己的解决方案 我刚把所有的方法和成员都移到了外层。