初始化一个具有另一个类对象作为成员变量的类

Mistu4u

这是我的第一堂课:

package trickycorejava;

public class InnerClass {
    int id;
    oneClass oneClass;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public trickycorejava.oneClass getOneClass() {
        return oneClass;
    }

    public void setOneClass(trickycorejava.oneClass oneClass) {
        this.oneClass = oneClass;
    }

    public InnerClass(int id, trickycorejava.oneClass oneClass) {
        this.id = id;
        this.oneClass = oneClass;
    }
    public InnerClass(int id){
        this.id = id;
    }
}

class oneClass {
    private String name;

     public String getName() {
        return name;
     }

     public void setName(String name) {
        this.name = name;
    }
}

这是main方法所在的类,请注意程序包是不同的:

package trickycorejava.constructor;

import trickycorejava.InnerClass;

public class InnerClassTest {
    public static void main(String[] args) {
        InnerClass innerClass = new InnerClass(1);
    }

}

在这种情况下,如何使用构造函数初始化InnerClass?如果我用

InnerClass innerClass = new InnerClass(1, new oneClass("Test"));

我收到oneClass不是从外部程序包无法访问的非公共错误

BalázsEszes

正如Turing85指出的,该文件oneClass应该位于它自己的文件中,否则它将变成原来的文件,package-private这意味着您只能从同一包的类中对其进行访问。

还有另一种方法吗?有,但不会是简单的构造函数调用。使用反射,您可以绕过类,字段和方法的调用保护。

public class InnerClassTest {
    public static void main(String[] args) throws Exception {
        Constructor<OneClass> constructor = OneClass.class.getDeclaredConstructor(String.class);
        constructor.setAccessible(true);
        OneClass instance = constructor.newInstance("John");
        InnerClass innerClass = new InnerClass(1, instance);
    }
}

这是因为该类是程序包私有的,所以它找到Main私有的构造函数。然后禁用它的保护,请注意,这些是临时的,Constructor对象是一个新引用,并且仅允许通过此引用进行调用。

但是我不建议广泛地这样做反射有一些用例,主要用于帮助像Spring这样的框架中的程序员,但否则会破坏面向对象的模式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何初始化作为另一个类的成员变量的基类对象?

初始化具有指向另一个类的成员变量的成员指针的类的向量

一个类具有另一个类的实例的JVM初始化顺序是什么

使用从另一个类继承的类的对象初始化成员对象

初始化变量后在另一个类中构造对象

另一个类中的参数化对象初始化

Java:在初始化块中初始化对象时从另一个类调用对象的方法

用另一个对象的公共变量初始化一个对象

用参数初始化另一个类构造函数中的对象

C ++:使用另一个类中的参数初始化对象数组

在另一个类中初始化一个指针

在 ASP .NET 中使用静态类初始化另一个静态类的成员

另一个类的c ++私有对象:初始化并使用它调用该类中的函数

填充一个具有另一个类作为属性的类

用类中的另一个成员初始化成员数组的大小

如何确保仅初始化一个实例,但从另一个类初始化?

如何编写一个空类,该空类初始化另一个类的三个对象

如果一个类包含另一个类的对象,并且所有类都通过构造函数初始化,那么初始化如何工作?

使用类的构造函数来初始化另一个类

在另一个类中初始化改造类

在另一个类构造中初始化它时找不到类

在 C++ 类中初始化另一个类

一个类,其指针指向另一个类作为成员变量并将其推入向量

(复制构造函数)作为参数传递来初始化另一个对象的对象如何访问私有成员?

如何使用从另一个类获得的值刷新/重新初始化一个类?

Python:如何从一个类到另一个类获取未初始化的属性

如何通过另一个类更新/更改一个类的初始化参数?

创建一个类实例作为另一个类的成员

具有来自另一个类的变量的对象数组