有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java错误重写扩展泛型类的类的方法

我有一个类a扩展了一个类B,而类B扩展了一个泛型类

我的A班是:

public class MyCustomerReviewConverter<SOURCE extends CustomerReviewModel, TARGET extends ReviewData> extends CustomerReviewConverter{

    @Override
    public void populate(final SOURCE source, final TARGET target) {.....}

扩展的B类是

public class CustomerReviewConverter extends AbstractPopulatingConverter<CustomerReviewModel, ReviewData>{

    @Override
    public void populate(final CustomerReviewModel source, final ReviewData target)
    {..........}

但我发现了错误

 Name clash: The method populate(SOURCE, TARGET) of type MyCustomerReviewConverter<SOURCE,TARGET> has the same erasure as populate(CustomerReviewModel, ReviewData) of type 
     CustomerReviewConverter but does not override it

怎么了

作为populate方法中的第二个参数,我必须传递一个类

MyReviewData extends ReviewData{...}

提前谢谢

安德里亚


共 (1) 个答案

  1. # 1 楼答案

    棘手且难以解释

    1. 类型参数在泛型AbstractPopulatingConverter中定义
    2. 类型参数在CustomerReviewConverter中具体化
    3. 然后,尝试在MyCustomerReviewConverter中再次将具体化的类型参数设置为泛型

    这根本不管用。您试图用具有不同方法签名(不同参数类型)的方法重写方法

    重写该方法的唯一方法如下:

    @Override
    public void populate(final CustomerReviewModel source,
            final ReviewData target) { /* ... */ }
    

    但是,您可以重载该方法,而不是覆盖该方法:

    public void populate(final MyCustomerReviewModel source,
            final MyReviewData target) { /* ... */ }
    

    如果使用MyCustomerReviewModelMyReviewData参数对类型为MyCustomerReviewConverter的对象调用populate()方法,编译器将选择最具体的populate方法,即重载方法