如何在接口中进行参数化,然后在实现的类中指定泛型类型

时间:2015-08-28 09:08:19

标签: java generics

我希望有一个界面:

public interface CarManager<T extends Car> {
    public T createCar(Map data);
    public T saveCar(T t);
}

所以我可以这样做:

public class FiatManager<Fiat> implements CarManger {
    public Fiat createCar(Map data) {
         // ...
    }
    // ...
}

适用于延伸Car的各种车型。

然而,当我尝试时,我收到一条错误,我没有实施createCar

确切的错误消息是:

The class 'FiatManager' must be declared abstract or the method Car     createCar(Map data)' must be implemented.

3 个答案:

答案 0 :(得分:4)

您忘记实施界面:

public class FiatManager implements CarManager<Fiat>

当然,您必须确保Fiat extends Car

另外,(正如@Thilo正确指出的那样)请注意FiatManager不再是通用的,因为它已经被称为处理Fiat(s)的那个。

答案 1 :(得分:2)

仅适用于Fiat s,然后:

public class FiatManager implements CarManager<Fiat>
    public Fiat createCar(Map data) {
         // ...
    }
    // ...
}

对于所有Car s:

public class FiatManager<T extends Car> implements CarManager<T>
    public T createCar(Map data) {
         // ...
    }
    // ...
}

答案 2 :(得分:1)

您需要将FiatManager课程声明为:

public class FiatManager implements CarManager<Fiat>{

然后,您需要实现createCarsaveCar两种方法。

当然,假设您有一个Fiat类扩展或实现Car

最后,请注意方法参数中的原始Map