该方法不适用于参数

时间:2017-11-12 13:04:49

标签: java interface

我有一个接口和2个实现它的类,第三个类有2个方法 - 一个获取第一个类对象作为参数,第二个获取另一个。我有一个包含两种类型对象的向量,我想在每个元素上使用第三个函数的方法而不必转换类型,因为我不知道每个向量元素是什么类型。我怎样才能做到这一点?这是代码:

public interface Transport {
}

public class Car implements Transport {
}

public class Bike implements Transport {
}

public class Operation {
    public void operation(Car c) {
        System.out.println("1");
   }

   public void operation(Bike b) {
       System.out.println("2");
   }

主要是我有这个:

Transport[] t = new Transport[3];
t[0] = new Car();
t[1] = new Bike();
t[2] = new Car();
Operation op = new Operation();
op.operation(t[0]); // here I get the error - method not applicable for arguments 

这段代码是我所做的简化版本,为了更容易阅读,不只有三个元素,它们是根据它得到的输入在for循环中创建的。

1 个答案:

答案 0 :(得分:5)

在编译器不知道表达式的运行时类型的情况下,您尝试使用方法重载。

具体来说,编译器不知道t[0]Car还是Bike,因此会发出错误。

您可以通过撤消通话来解决此问题:给Transport方法拨打operate,然后再拨打电话:

public interface Transport {
    void performOperation(Operation op);
}

public class Car implements Transport {
    public void performOperation(Operation op) { op.operate(this); }
}

public class Bike implements Transport {
    public void performOperation(Operation op) { op.operate(this); }
}

现在您可以按如下方式拨打电话:

Transport[] t = new Transport[3];
t[0] = new Car();
t[1] = new Bike();
t[2] = new Car();
Operation op = new Operation();
t[0].performOperation(op); 

这种技术通常称为Visitor Pattern