简体   繁体   English

Java内部类访问另一个内部类中的变量

[英]Java inner class access variable in another inner class

My main Class has 2 inner class, 1 of them is thread, I don't know how my inner class 2 can access (Or how to know var1 is true or false) value of inner class 1, this is my example, thanks!我的主类有 2 个内部类,其中 1 个是线程,我不知道我的内部类 2 如何访问(或者如何知道 var1 是 true 或 false)内部类 1 的值,这是我的示例,谢谢!

public class InnerClass  {
    public class InnerClass1 implements NativeKeyListener {
        public boolean var1;
    }

    public class InnerClass2 implements Runnable{

        @Override
        public void run() {
            while (true) {
                var1...
            }
        }

    }
}

You cannot access nonstatic variables/methods/inner classes unless you have instantiated the object (ie created an instance of the object ).除非您已经实例化了对象(即创建了对象的实例),否则您无法访问非静态变量/方法/内部类。 You need an InnerClass1 object before you can store or get anything out of it.您需要一个InnerClass1对象,然后才能存储或从中获取任何内容。 Until you do something like InnerClass1 foo = new InnerClass1() , there is no var1 anywhere.在您执行类似InnerClass1 foo = new InnerClass1() ,任何地方都没有var1

Anyway, I think you are misusing inner classes.无论如何,我认为您正在滥用内部类。 I'd suggest if you haven't already walking through the Java Tutorials Trail to get a basic idea of how classes, fields, and instantiation work in Java.如果您还没有浏览过Java Tutorials Trail ,我建议您对Java 中的类、字段和实例化的工作方式有一个基本的了解。

You can do it by an interface or class that is implemented by innerclass1.您可以通过由innerclass1 实现的接口或类来实现。 Try this:尝试这个:

public interface NativeKeyListener {
boolean a();
}

public class InnerClass {

static NativeKeyListener m() {
    class InnerClass1 implements NativeKeyListener {
        public boolean var1;

        public boolean a() {
            return var1;
        }
    }
    return new InnerClass1();
}

public class InnerClass2 implements Runnable {

    public void run() {
        NativeKeyListener i = InnerClass.m();
        i.a();
    }

}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM