2016-11-24 7 views
0

私は以下の構造を持っています。ここでは、デフォルトで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(); 

を...

私が直面しています問題は、私は最善を知らないということです実行時にこの値を変更する必要があるので、引数としてbaseDirectory属性を渡す方法です。私は反射を使用しようとしていますが、その時点で動作していません。可能性のある回避策を考えてみましょうか?

は、私は、デフォルト値のCデ変更する必要があります要約すると:/ MSG-受信トレイを/類似した別のものに\ folder1のにテスト

よろしく

+0

のインスタンスは、なぜ ''コンストラクタPerformanceTest(String)を提供しない、従ってMessagePerformanceTestのインスタンスであり、? – SomeJavaGuy

+0

この状況では不可能 –

+0

まあ、シンプルなセッターのような音はうまくいくでしょう)なぜ簡単な操作のために反射が必要なのですか? – Enigo

答えて

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は、タイプPerformanceTest

関連する問題