我写了一个小程序,里面有几个已定义的类。我正在为这些课程编写测试。我为其中一个类编写的构造函数有一个参数,它是另一个类的实例。所以,它看起来像这样:
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。
感谢您的帮助!如果需要任何澄清,请告诉我。
答案 0 :(得分:1)
假设ClassA
有两个实例化类,ClassB
和ClassC
由
ClassB classB = new ClassB();
ClassC classC = new ClassC();
然后可以在ClassB
中引用 ClassC
和public
ClassA
个变量,例如:classB.variableName
。
这可以将public
的任何对象从基本类型引用到对象。
如果未实例化类,则public
变量必须另外使用static
关键字进行引用。此static
引用允许您绕过父类和实例化的封装。
换句话说,ClassB
可以引用父类ClassA
来检索自身的public static
实例,但如果它不是static
变量,则必须依赖于实例化,静态getter方法或使用getter方法实例化来访问这些对象。
希望这会有所帮助:)
答案 1 :(得分:0)
假设你有两个班级
git push origin --force --all -v
他们有几个选项可以从这些类中访问字段成员。
通常推荐的方法是为字段创建setter和getter。这样,任何包含对这些类的实例的引用的块都将能够访问和修改这些字段。
您还可以选择公开这些字段,这也将允许任何包含对这些类的引用的代码块访问公共字段。
如果您希望某些课程可以访问这些字段,但不是所有人(非公开),您可以使其受到包保护。这将允许同一个包中的任何其他类访问这些字段,但不允许其他任何人访问。要使字段(或方法)包受到保护,您只需为相关字段指定访问修饰符(公共或私有)。您可以阅读更多here。
最后,非常方便进行测试,就是使用反射来访问私有成员。反思不是很有效率,而且有点hackish,但在某些情况下它可以非常方便。我主要使用反射来模拟单元测试中的对象,但也看到它以非常有趣的方式使用。
Field field = MyClass.getDeclaredField(" fieldName"); field.setAccessible(true); String flag = field.get(myInstance);
PS>写这个主要来自记忆,但我相信这应该让你去。
希望这有帮助!祝你好运!