2016-08-24 8 views
0

別のクラスで書かれた関数を実行するメインクラスが1つあります。これを「コード」クラスと呼ぶことにします。今度はもう1つの "コード"クラスを作成しました。そこにも関数を呼びたいと思います。私は、両方のコードクラスにコンストラクタがあり、複数のオブジェクトを作成すると、私のテストでうまくいくので、メインクラスに複数のオブジェクトを作成したくありません。私は知っているように複数のクラスを拡張することはできません。そのクラスのオブジェクトを作成せずに、2番目のコードクラスの関数を呼び出すための他の解決策はありますか?複数のクラスからの関数へのアクセス方法

ReqOrderImpMain d = new ReqOrderImpMain(); 
//Request Order Import - First page function calling 
d.page(); 
d.checkLoginAndProceed(); 
/*d.output(); 
    d.correctORNumber(); 
    d.createNewOrder(); 
    d.checkOrder(); 
    d.checkSend(); 
    d.quantityCheck(); 
    d.restMatWithQuantity(); 
    d.submit(); 
    d.quit();*/ 
    //Request Order Import - Rest of the pages function calling ??.output(); ??.select(); 
} 

dの機能。最初のコードクラスから呼び出されます。私は??。function()のものを呼び出せるようにしたい。

+0

まず、あなたのデザインは本当に混乱しています.2つの "コード"クラスがあるのはなぜですか?それらはどちらも "コード"と呼ばれていますか? FIRSTコードクラスのソースコードにアクセスできませんか? FIRSTコードクラスのメソッドを呼び出す必要があるときはいつでも、SECONDコードクラスのFIRSTコードクラスをラップしてSECONDからFIRSTのインスタンスを返すことはできませんか?質問にソースコードを追加する必要があります(たとえ単純な例でも)。デザインに問題があり、正しくアプローチしていないようです。 – sloven

+0

こういうわけです:私は1つのメインクラスを持っていますよね?私は関数を呼び出すだけです。前のコードは私のメインメソッドから、私のメインクラスのものです。次に、私はd.page()、d.checkLoginAndProceedなどのメソッドを実装しているRequest Order Importを扱う別のクラスを持っています。そして今、私はRequest Order Importの一部である他のページをテストする必要があります。だから、私はそれらのために別のクラスを持っていたいと思っています。一つのクラスの中にすべてのコードを含めないように...そういうように見えません。あなたはなにか考えはありますか?それとも、すべての実装を1つのクラスに記述するのが唯一の方法ですか? – Tudor

+0

質問にあなたのコードを追加しましたが、あなたはその質問に行きたいかもしれません。 – DanielBarbarian

答えて

0

クラスのインスタンスを作成せずにクラス内の関数(メソッド)を呼び出す場合は、静的メソッドを作成する必要があります。

public class ClassWithStaticMethod { 

    public static void staticMethod() { 
     ... 
    } 

} 

あなたは、このような方法(不要インスタンス)を呼び出すことができます。

ClassWithStaticMethod.staticMethod(); 

それはあなたがが、あなたのテストでコーナーに自分自身を支持していることのように聞こえる、と再設計を検討する必要があり、あなたのコード/テスト。私はあなたの実際のコードがどのように見えるか、動作するかをテストコードが決めるべきではないと思います。

+0

情報ありがとう!私は静的メソッドを作ることができません。なぜなら、静的に非静的な参照を使用することはできません。だから、現時点では、私は関数を書く2つの主要なクラスと関数を書く2つのメインクラスがあり、同じクラスの中にすべての関数を書くことは望ましくありません。あなたはどう思いますか?テストをどのように設計すればいいですか?正しい方法は何ですか? – Tudor

+0

静的メソッドから非静的メソッドを呼び出すことはできません。なぜなら、静的メソッドの場合は 'this'が存在しないからです。私はあなたのデザインは、次の要件なしではもっと簡単になると思います。「私はメインクラスに複数のオブジェクトを作成したくありません。何故ですか? – Adam

+0

まあ、私は本当に多くのオブジェクトを作成したい:D問題は、両方のクラスがエラーを処理するためのコンストラクタを持っているということです。両方のクラスでメソッドを実行する代わりに、他のクラスをインスタンス化すると、Firefoxは2つの空白ページを開き、何もしません。しかし、私が2番目のオブジェクトの作成をコメントすると、テストは円滑に実行されます。互いに干渉することなく別のオブジェクトを作成するアイデアがある場合は、撮影してください!それがこの問題の最良の解決策になります! – Tudor

0

オブジェクトが1つだけで、2番目のクラスの関数の結果を使用する場合は、最初のオブジェクトに(1)(いくつかの属性を使用して)割り当てるか、 2)(それらが無効の場合)。

1)firstCodeClassObject.someAttribute = SecondCodeclass.doSomeMethod(inputType input);

2)SecondCodeclass.doSomeMethod(inputType input);

0

いいえ、答えが見つかりました。私は、メインクラスのドライバを初期化してから、コンストラクタを作成し、ドライバのリファレンスを他の2つのクラスに渡すだけです。

関連する問題