私は、彼らが実装することをクラスとインタフェースの間の相互作用に苦しんでいます。具体的には、どのタイプのインターフェイスの変数を宣言し、次に実装するクラスのコンストラクタは、パラメータを必要とするインタフェース、こと変数にクラスのオブジェクトを割り当てます。私は、仕様書に基づいてこれを実装していますので、私はちょうど何のパラメータを必要としないコンストラクタを追加することはできません。
私は2つのパラメータを必要とし、コンストラクタ、およびゲッターメソッドがあります。
public class exampleImpl implements example{
private int var1;
private int var2;
public exampleImpl(int var1, int var2) {
if(var2< 0) {
var1 = 1;
var2 = 1;
}
public int getVar1(){
return Var1;
}
public int getVar2(){
return Var2;
}
私は、どの方法を「操作」している必要があり、入力としてのインターフェースを取り、出力としてそれを返します:
public example manipulate(example e) {
example eInst = (exampleImpl)e;
int newVar1 = (this.getVar1()*eInst.getVar2() + this.getVar2()*eInst.getVar1());
int newVar2 = this.getVar2()*eInst.getVar2();
Pair<Integer, Integer> pair = normaliseExample(newVar1, newVar2);
int normalisedNewVar1 = pair.getKey();
int normalisedNewVar2 = pair.getValue();
example summedE = new exampleImpl(normalisedNewVar1, normalisedNewVar2);
return summedE;
}
インタフェース自体は、このメソッドを定義します。
public interface example extends Example {
public example manipulate(example e);
}
私の方法は、インターフェースの例の変数を宣言してから実装例という変数にexampleImplのオブジェクトを割り当てるという点で有効ですか?また、タイプの例の変数を返す必要がありますが、それらは、インタフェースで定義されていないので、この問題が発生したときnewVar1とnewVar2がどこに行くか分かりません。
私はまた、JUnitの4を使用してこのメソッドをテストする必要があると私はあなたのタイプの例のオブジェクトをインスタンス化することはできませんことを考えると、これを行う方法の完全な損失で午前、ので、どのように私はパラメータなどに渡すことができます。
class exampleImplTest {
@Test
public exampleImpl testManipulate()
{
assertEquals(example,exampleImpl.manipulate(example(3,4)));
}
エラーが操作するので、このショーは、静的メソッドではありませんが、それは仕事にオブジェクト(this)を必要とするときにどのように私はそれ静的メソッドにすることができますか?私は上のこのテストを呼び出すためのテストクラス内のオブジェクトを作成できますか?私はそれがオブジェクト「この」新しいオブジェクトの「e」に基づいて、右の操作を返すチェックしたいです。これを行う方法はありますか?
この質問は誤解で細工された場合の謝罪は、私は完全な初心者です。私は、仕様がここでそれらを使用するために私を必要とするインターフェースを使用する方法を理解することは非常に苦労しています。すべてのヘルプは非常に高く評価されるだろう。
(私は、クラスやインタフェース名の開始のために大文字を使用します)
私の方法は、インターフェースの例の変数を宣言してから実装例という変数にexampleImplのオブジェクトを割り当てるという点で有効ですか?
はい、しかし、この場合にはそれが必要とされていない、あなたはこのとにかくのようにそれを行うべきではありません。あなたは、パラメータを経由してくる物体があることを前提とe
常になりExampleImpl
ますが、その変数のハードコードされたキャストを持っているため、インスタンス。それは、このようなAクラスでない場合は、取得しますClassCastException
。この場合、あなたは削除することができます
Example eInst = (ExampleImpl)e;
ラインおよび変数を使用してe
代わりに。
また、タイプの例の変数を返す必要がありますが、それらは、インタフェースで定義されていないので、この問題が発生したときnewVar1とnewVar2がどこに行くか分かりません。
あなたはすでに、コードを書かれています
Example summedE = new ExampleImpl(normalisedNewVar1, normalisedNewVar2);
return summedE;
これは実装するオブジェクト、戻りますExample
インターフェイスを。だから、すべてがここに罰金です。あなたが使用したい場合newVar1
やnewVar2
、あなたの実装との要件に依存manipulate
する方法。
私は上のこのテストを呼び出すためのテストクラス内のオブジェクトを作成できますか?
はい、それはそうする通常の方法です。書く
Example obj = new ExampleImpl(4, 5);
あなたの試験方法で作成するExample
あなたと働くことができるオブジェクトを。あなたは呼び出すことができますmanipulate()
異なるとの方法をExample
、このようなオブジェクト:
Example obj = new ExampleImpl(4, 5);
Example obj2 = new ExampleImpl(10, 20);
Example obj3 = obj.manipulate(obj2);
私はそれがオブジェクト「この」新しいオブジェクトの「e」に基づいて、右の操作を返すチェックしたいです。これを行う方法はありますか?
これは、他の方法があなたの上に定義されているかに依存Example
インタフェース。あなたは、それはまた、名前の異なるインターフェースから延びていることが書かれていますExample
。で定義されているものの基本そのインターフェースは、あなたの他のメソッドを呼び出す可能性があるExample
。このようなオブジェクトを:
Assert.assertEquals(42, obj3.getDifference()); // or whatever other methods you have