简体   繁体   中英

Implement a parameterized interface method that has a parameterized class argument with a concrete class

public interface AssignmentInterface<T> {

    MetadataFieldInterface<T> getField();
    
    void setField(MetadataFieldInterface<T> field);
}
public class DatasetAcquisitionAssignment implements AssignmentInterface<DatasetAcquisition>  {

    @Override
    public DatasetAcquisitionMetadataField getField() {
        ...
    }

    @Override
    public void setField(DatasetAcquisitionMetadataField field) { // HERE !!! 
        ...
    }
public enum DatasetAcquisitionMetadataField implements MetadataFieldInterface<DatasetAcquisition> { ... }

Eclipse error: The method setField(DatasetAcquisitionMetadataField) of type DatasetAcquisitionAssignment must override or implement a supertype method

Compilation fails as well

Using public void setField(MetadataFieldInterface<DatasetAcquisition> field) {} instead fixes the problem (but leads to further problems at runtime, with jackson)

What can I do so I can use DatasetAcquisitionMetadataField as the concrete method argument?

Can you change your interface to?

public interface AssignmentInterface<T, R extends MetadataFieldInterface<T>>{

    MetadataFieldInterface<T> getField();

    void setField(R field);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM