2 a86775748 a86775748 于 2016.01.20 15:33 提问

java如何获取静态内部类变量

public class A{
private B b;

public B getB() {
    return b;
}

public void setB(B b) {
    this.b = b;
}

static class B{
    private C c;
    public C getC() {
        return c;
    }
    public void setC(C c) {
        this.c = c;
    }
}
static class C {
    private Integer a;


    public Integer getA() {
        return a;
    }
    public void setA(Integer a) {
        this.a = a;
    }
}

}
如何获取C类的变量a?

6个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.01.20 15:58
 A a = new A();
    a.getB().getC().getA()
danielinbiti
danielinbiti 回复Logo菜鸟: 只是说不知道你这B类,C类怎么set到A类中对应的方法的。如果要取值就只能这么取
2 年多之前 回复
a86775748
a86775748 获取不到,代码会报错,B类不是public的
2 年多之前 回复
ManRoot
ManRoot   2016.01.20 16:03

A a = new A();
test.getB().getC();

a86775748
a86775748 获取不到,代码会报错,B类不是public的
2 年多之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.01.20 16:35

B类弄个public的不就行了吗

lijianhuilijie
lijianhuilijie   2016.01.20 16:54

之所以叫做内部类,就只能在本类(A)中访问
要取值的话,new C().getA()不就行了

static修饰的类作为静态类,类初始化后内存中就只有一份。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.20 17:33

因为C是A的静态内部类,所以可以直接在A类中访问C的,测试代码:

    public static void main(String[] args) {
        A a = new A();
        C c  = new C();
        c.setA(10);
        System.out.println(c.getA());
    }
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.20 17:45

你如果要绕圈子通过B类来获得C类的a属性值,可以如下:

    public static void main(String[] args) {
        B b = new B();
        C c  = new C();
        b.setC(c);
        c.setA(100);
        System.out.println(b.getC().getA());
    }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java 利用反射获取内部类静态成员变量的值
利用java反射解析内部类静态成员变量的值
静态内部类访问外部类静态变量的原因分析
写一个类用来判断是否静态类和非静态类的能不能访问外部的静态变量和非静态变量,答案是静态内部类可以访问静态变量,而不可以访问类的非静态内部类。 原因是:当一个静态内部类被使用的时候,它的外部类一定已经被加载了(这个可以参考类加载机制),外部类加载了以后它的静态变量才会放到了方法区中,然后才能被静态内部类访问,而一般的成员变量此时还没有被分配内存,因而没法进行访问。 package Mai
静态内部类解决静态变量注入问题
1.静态变量不可直接注入,可通过setter的方式注入,且setter方法不能为static,实际上是在静态变量被加载并默认初始化过后,初始化bean时被注入的2.静态内部类可在bean被初始化之后再加载,从而实现利用外部类静态变量的目的3.变量的注入,需要注意变量名的统一 public class OssClient { //log private Logger logg
JAVA静态变量、静态方法、静态代码块和静态内部类
一、静态变量     1.静态变量使用static修饰     2.静态变量属于类,可以被类及此类的所有对象访问。普通成员变量属于对象,不能被类直接访问     3.静态变量存储在静态方法区,普通成员变量存储在堆区。     4.静态变量随着类的初始化而初始化,普通成员变量随着对象的初始化而初始化。     5.静态变量不被jvm回收,普通成员变量被jvm回收。     6.静态变量可
Handler的正确使用,使用静态内部类+虚引用,解决Context泄漏
我们在使用handler时候很多时候是如下用法: public class MainActivity extends AppCompatActivity { //private ArrayList<String> mList; //private MyListAdapter mListAdapter; //private ListView mLv; private I
关于java内部类访问类的静态成员变量
当我在写一个android小软件的时候,出现了这样的一个情况, handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case ValueEnum.CREATE_ITEM:
Java基础,外部类能够访问内部类的私有静态字段。
外部类能够访问内部类的私有静态字段。 public class Singleton { private Singleton() { } public static Singleton getInstance() { return SingletonHolder.sInstance; } private static clas
使用静态内部类实现延迟加载单例模式
所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在。就像是Java Web中的application,也就是提供了一个全局变量。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类就称为单例类。 单例的创建一般分为懒汉式,恶汉式,双重锁检查,枚举等,其中双重锁检查只能在jdk1.5以后才能有效,1.5以前在java对象模型中的无序写问题不能保证。
通过反射来构造内部类的三种情况
第一种情况,通过反射来构造公开的静态的内部类的对象。 package com.example.reflect;import java.lang.reflect.InvocationTargetException;public class Outer {/** * 通过反射来构造公开的静态的内部类的对象 * @author jack * */ publi
子父类方法调用关系,内部类总结
public class Privateoverride { private void f() { System.out.println("private f()"); } public static main(String[] args) { PrivateOverride po = new Derived(); po.f(); } } class Derived