Java 检查类是否有成员变量?

Java 检查类是否有成员变量?,java,class,class-members,Java,Class,Class Members,我写了一个小程序,里面有几个定义的类。我正在为这些课程编写测试。我为其中一个类编写的构造函数有一个参数,它是另一个类的实例。所以,它看起来像这样: interface type1 {} interface type2 {} class class1 implements type1{ String something; int somethingElse; //... } class class2 implements type1{ String someth

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

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, ...);
}
如上所述,我正在创建测试。有两个测试类(每个接口一个)。我希望它们看起来像这样:

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成员的对象,以便。。。运行我的测试?假设我无法在同一个类中测试两个接口,并且无法再次定义ExamplesType1和ExamplesType2中定义的对象

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

抱歉,如果这是一个新问题。。。今天刚开始使用Java


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

假设
ClassA
有两个实例化的类,
ClassB
ClassC
,由

ClassB classB = new ClassB();
ClassC classC = new ClassC();
ClassB
ClassC
public
变量可以在
ClassA
中引用,例如:
ClassB.variableName

这可以将
公共的任何对象从基元类型引用到对象

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

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


希望这有帮助:)

假设你有两门课

class ClassA {
    String flag;
    ...
}

class ClassB {
    String flag;
    ...
}
您有几个选项可以从这些类访问字段成员

  • 通常推荐的方法是为字段创建setter和getter。这样,任何持有这些类实例引用的块都可以访问和修改这些字段

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

  • 如果您希望某些类可以访问这些字段,但不是所有人(不是公共的),可以将它们设置为包保护。这将允许同一包中的任何其他类访问这些字段,但不允许任何其他类访问这些字段。要保护字段(或方法)包,只需不为相关字段指定访问修饰符(public或private)。你可以读更多

  • 最后,对于测试来说非常方便的是使用反射来访问私有成员。反射的性能不是很好,有点粗俗,但在某些情况下它可能非常方便。我主要使用反射来模拟单元测试中的对象,但也看到它以非常有趣的方式使用

    Field=MyClass.getDeclaredField(“fieldName”); 字段。setAccessible(true); 字符串标志=field.get(myInstance)

  • 写这篇文章主要是出于记忆,但我相信这会让你走下去


    希望这有帮助!祝你好运

    如果遵循类和接口名称的命名约定会更好。根据Oracle的说法:“类名应该是名词,大小写混合,每个内部单词的第一个字母大写。”在进入公共字段之前,必须创建
    ExamplesType1
    的实例。不过,您确实应该使用getter方法。您的代码中没有公共成员。@4尽管我同意您的看法,但我应该这样做。但是我不能。。。这是一项学校作业,要求有些迟钝。创建一个实例可能会起作用。。。看不出他们(助教)为什么会扣分。谢谢确定其他类是否可以使用特定字段或调用特定方法。我很高兴这有帮助:)