我想从另一个类
访问Test类中的car对象实例class Test {
private car = new car(12);
}
class car {
int i;
car(int i) {
this.i = i;
}
}
答案 0 :(得分:2)
看到您的代码有错误(例如,课程car
必须为Car
),我建议您阅读this one和this one等教程,了解如何使用反射。
以下是基于您的评论的简短示例:
public class Test{
private car = new car(12);
public Test() {
Fields[] fields = this.getClass().getDeclaredFields();
if (fields != null) {
for (Field field: fields) {
Class<?> fieldType = field.getType();
System.out.println(fieldType.getName());
if (Car.class == fieldType) {
System.out.println("Field: " + field.getName() + " is of type " + Car.class.getName());
}
}
}
}
}
答案 1 :(得分:1)
要访问类的私有属性,您需要创建一个返回该属性/字段的方法。所以返回Test写的车 public Car getCar(){ 回车; }
答案 2 :(得分:0)
对于真正必须访问私有成员的测试,看看是否可以将私有成员设置为protected,然后让Test(或测试包装器)子类成为“待测试”对象。也就是说,最好通过方法调用来测试100%。
测试应该允许封装,所以你真的想要放弃查看对象内部的业务。如果您破坏了测试框架中的封装,则会失去封装所带来的所有可维护性优势。简而言之,如果您尝试“修复”您的对象,则必须重写所有测试以符合新的“固定”架构。
仅仅测试世界其他地方将会看到的对象部分远远好得多,这是在您阅读/设置/处理所需内容之后的外部。这样,如果您更改了内部内容,您将拥有一套已经“准备就绪”的测试,以验证您的更改并未破坏从世界其他地方看到的对象的行为。
答案 3 :(得分:0)
Test test = new Test();
Field f = test.getClass().getField("car");
Object car = f.get(test);
答案 4 :(得分:0)
我想这样做来检查一些类,并在 new 运算符后找到它们的默认内部状态。无论如何,我在本教程中找到了答案:
整个教程系列很有用。如果你赶时间,我已经粘贴了有趣的位:
PrivateObject privateObject = new PrivateObject("The Private Value");
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
非常简单。一旦找到有时间解释的人。感谢stackoverflow。