Skip to content
Advertisement

Cannot use base class without passing its type in Java

I want to create a common service and common request as shown below:

public interface CommonService {

    CommandDTO createOrUpdate(CommonRequest request);
}

Then implement this service as shown below:

public class CompanyARequest extends CommonRequest {

    // properties
}
public class CompanyAServiceImpl implements CommonService {

    @Override
    public CommandDTO createOrUpdate(CompanyARequest request) {
        // ...
    }
}

However, although CompanyARequest is inherited from CommonRequest, createOrUpdate method throws “Method does not override method from its superclass” error.

On the other hand, if I use generic for the request, the error is gone, but if I use generic for request and dto, there will be too much letter is used and I just want to use generic letters for entities that will be used in CommonService. SO, how can I fix this problem? Is there any mistake of my implementation?

Advertisement

Answer

You are looking for a generic interface from what I understand:

public interface CommonService<C extends CommonRequest> {

    CommandDTO createOrUpdate(C request);
}

public class CompanyAServiceImpl implements CommonService<CompanyARequest> {

    @Override
    public CommandDTO createOrUpdate(CompanyARequest request) {
        // ...
    }
}

If you were to define it like you first did, the issue is that any CommonRequest should be accepted by the method according to its definition in the interface.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement