【发布时间】:2020-04-03 15:21:03
【问题描述】:
我正在努力解决它们实现的类和接口之间的交互。具体来说,当类的构造函数需要参数时,如何声明接口类型的变量,然后将实现接口的类的对象分配给该变量。我是根据规范来实现的,所以我不能只添加一个不需要参数的构造函数。
我有一个构造函数,它需要 2 个参数和 getter 方法:
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;
}
然后我有一个方法“manipulate”,必须将接口作为输入并将其作为输出返回:
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);
}
我的方法在声明接口 example 的变量然后为该变量分配一个实现 example 的 exampleImpl 对象方面是否有效?它还必须返回一个 example 类型的变量,但我不知道 newVar1 和 newVar2 发生这种情况时会去哪里,因为它们没有在接口中定义。
我还需要使用 JUnit 4 测试此方法,但我完全不知道如何执行此操作,因为您无法实例化类型为 example 的对象,所以我如何传递参数,例如:
class exampleImplTest {
@Test
public exampleImpl testManipulate()
{
assertEquals(example,exampleImpl.manipulate(example(3,4)));
}
这显示了一个错误,因为操作不是一个静态方法,但是当它需要一个对象(this)才能工作时,我怎样才能使它成为一个静态方法呢?我可以在测试类中创建一个对象来调用这个测试吗?我想检查它是否返回基于对象“this”和新对象“e”的正确操作。有没有办法做到这一点?
抱歉,如果这个问题造成误解,我是一个完整的初学者。我很难理解如何使用接口,因为规范要求我在这里使用它们。任何帮助将不胜感激。
【问题讨论】:
-
类(和接口)名称应以大写开头,以免与以小写开头的变量和方法混淆。
-
您好,我刚刚调整了这个示例的名称,它们在脚本中是大写的。您能帮忙解答以上问题吗?