我有以下结构,默认情况下有一个带有baseDirectory属性的抽象类。
public abstract class PerformanceTest {
/**
* Base directory.
*/
private String baseDirectory = "C:/msg-inbox/";
...
另一方面,有一个类从抽象类扩展。
public class MessagePerformanceTest extends PerformanceTest {
/**
* Constructor.
*/
public MessagePerformanceTest() {
}
...
最后我有一个这样的主要类:
public class MessagesMain {
public static void main(String[] args) {
Field field = PerformanceTest.class.getDeclaredField("baseDirectory");
field.setAccessible(true);
field.set(null,args[0]);
MessagePerformanceTest messagePerformanceTest = new MessagePerformanceTest();
messagePerformanceTest.createMessages();
...
我面临的问题是我不知道将de baseDirectory属性作为参数传递的最佳方法,因为我需要在运行时更改此值。我试图使用反射但它暂时不起作用。有谁想过可能的解决方法?
总结一下,我需要将默认值C:/ msg-inbox /更改为类似\ folder1 \ test
的其他内容此致
答案 0 :(得分:0)
baseDirectory
是一个实例字段,意味着它属于PerformanceTest
的实例。因此,要更改其值,您需要一个PerformanceTest
的实例。
但是PerformanceTest
是抽象类,所以你不能拥有它的实例。幸运的是,您有基类MessagePerformanceTest
来创建类型为PerformanceTest
的实例。
你需要这样的东西:
注意:我创建了get()方法来检查更改的值。
public abstract class PerformanceTest {
/**
* Base directory.
*/
private String baseDirectory = "C:/msg-inbox/";
public String get(){
return baseDirectory;
}
}
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(new MessagePerformanceTest().get() );
Field field = PerformanceTest.class.getDeclaredField("baseDirectory");
field.setAccessible(true);
MessagePerformanceTest mpt = new MessagePerformanceTest ();
field.set( mpt," \folder1\test");
System.out.println(mpt.get() );
}
}
mpt是MessagePerformanceTest的一个实例,因此是PerformanceTest类型的实例