检查类是否有成员变量?

时间:2017-01-12 01:12:42

标签: java class class-members

我写了一个小程序,里面有几个已定义的类。我正在为这些课程编写测试。我为其中一个类编写的构造函数有一个参数,它是另一个类的实例。所以,它看起来像这样:

interface type1 {}
interface type2 {}

class class1 implements type1{
    String something;
    int somethingElse;
    //...
}

class class2 implements type1{
    String something2;
    int somethingElse2;
    //...
}

class class3 implements type2{
    Object obj1;
    Object obj2;
    String blabla;
    //...

    class3(Object inObj1, Object inObj2, String x){
        this.obj1 = inObj1;
        this.obj2 = inObj2;
        this.blabla = x;
    }
} 

如上所述,我正在创建测试。有两个测试类(每个接口一个)。我希望他们看起来像这样:

class ExamplesType1{
    class1 type1Something1 = new class1(...);
    class2 type1Something2 = new class2(...);

}

class ExamplesType2{
    class3 type2Something = new class3(type1Something1, type1Something2, ...);
}

我的问题是,如何从ExamplesType2访问ExamplesType1成员的对象,以便我可以...运行我的测试?假设我不能在同一个类中测试两个接口,并且我不能再在ExamplesType2中的ExamplesType1中定义对象。

我知道我可以创建一个返回函数(例如,getType1Something()),但它们是公共的,所以我不能在不定义函数的情况下访问它们吗?

很抱歉,如果这是一个新问题......今天刚刚启动Java。

感谢您的帮助!如果需要任何澄清,请告诉我。

2 个答案:

答案 0 :(得分:1)

假设ClassA有两个实例化类,ClassBClassC

实例化
ClassB classB = new ClassB();
ClassC classC = new ClassC();
然后可以在ClassB中引用

ClassCpublic ClassA个变量,例如:classB.variableName

这可以将public的任何对象从基本类型引用到对象。

如果未实例化类,则public变量必须另外使用static关键字进行引用。此static引用允许您绕过父类和实例化的封装。

换句话说,ClassB可以引用父类ClassA来检索自身的public static实例,但如果它不是static变量,则必须依赖于实例化,静态getter方法或使用getter方法实例化来访问这些对象。

希望这会有所帮助:)

答案 1 :(得分:0)

假设你有两个班级

git push origin --force --all -v

他们有几个选项可以从这些类中访问字段成员。

  1. 通常推荐的方法是为字段创建setter和getter。这样,任何包含对这些类的实例的引用的块都将能够访问和修改这些字段。

  2. 您还可以选择公开这些字段,这也将允许任何包含对这些类的引用的代码块访问公共字段。

  3. 如果您希望某些课程可以访问这些字段,但不是所有人(非公开),您可以使其受到包保护。这将允许同一个包中的任何其他类访问这些字段,但不允许其他任何人访问。要使字段(或方法)包受到保护,您只需为相关字段指定访问修饰符(公共或私有)。您可以阅读更多here

  4. 最后,非常方便进行测试,就是使用反射来访问私有成员。反思不是很有效率,而且有点hackish,但在某些情况下它可以非常方便。我主要使用反射来模拟单元测试中的对象,但也看到它以非常有趣的方式使用。

    Field field = MyClass.getDeclaredField(" fieldName"); field.setAccessible(true); String flag = field.get(myInstance);

  5. PS>写这个主要来自记忆,但我相信这应该让你去。

    希望这有帮助!祝你好运!