组合:如何在没有空指针异常的情况下使用点符号访问非静态变量?

Composition: How to access non-static variables with dot notation without nullpointerexception?

我经常看到 'nested' classes 中的非静态变量(不完全是内部 class 的嵌套而是 class 组合)通过点符号。

例如

int a = getClassA().classB.classC.x; where 

getClassA() return一个Class类型的对象,A和x是我们有兴趣访问的变量。

classB 是 ClassA 中的变量。

classC 是 ClassB 中的一个变量。

x 是 ClassC 中的一个变量。

但是,当我尝试重新创建类似的测试场景时,出现 NullPointerException 错误。

代码

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

int a = getClassA().classB.classC.x;
}
}

public class ClassA 
{
ClassB classB;
}


public class ClassB 
{
ClassC classC;
}


public class ClassC 
{
int x = 1;
}

//Class Main, A, B and C are in separate files.

附加组件

在某处读到,在 c# 中有自动实现 属性。对于上面的示例,Class A 将是

public Class A {
private ClassB _classB;

public ClassB classB
{
get {
    if (_classB == null) _classB = new ClassB();
    return _classB; }
set {_classB = value; }
}
}

因此,ClassB 在通过点符号访问时被实例化。 Java中有类似的东西吗?

感谢对此的任何帮助。

谢谢。

如果这是确切的代码,由于缺少 getClassA() 方法而无法提供,则不要实例化 ClassBC,所以 NPE 是预期的。

通过实例化对象确保对象不为空

例如

public class ClassA 
{
    ClassB classB = new ClassB ();
}

public class ClassB 
{
    ClassC classC = new ClassC ();
}