0

Say I have this interface structure:

public interface ItemRequestConverter<IR extends ItemRequest> {
    Target convert(IR request);
}

public interface CreateItemRequestConverter<CIR extends CreateItemRequest>
    extends ItemRequestConverter<ItemRequest> {
}

public class CreatePartRequestConverter implements CreateItemRequestConverter<CreatePartRequest> {
    @Override
    public Target convert(CreatePartRequest request) {
        ...
    }
}

Now I wondering whether this is possible at all. I doubt that. When I create CreatePartRequestConverter the signature of the overridden method is the super type ItemRequest. This is not desired.

2
  • Can you explain what you're trying to achieve? I don't quite understand. Commented Jan 30, 2014 at 13:00
  • Why not extend ItemRequestConverter<CIR>? Commented Jan 30, 2014 at 13:08

2 Answers 2

1

I think your CreateItemRequestConverter class signature should be like this :

interface CreateItemRequestConverter<CIR extends CreateItemRequest>
        extends ItemRequestConverter<CIR> {

}

Test :

interface ItemRequestConverter<IR extends ItemRequest> {
    Target convert(IR request);
}

interface CreateItemRequestConverter<CIR extends CreateItemRequest>
        extends ItemRequestConverter<CIR> {

}

class CreatePartRequestConverter implements CreateItemRequestConverter<CreatePartRequest> {
    @Override
    public Target convert(CreatePartRequest request) {
        return null;
    }
}

class ItemRequest {
}

class CreateItemRequest extends ItemRequest {
}

class CreatePartRequest extends CreateItemRequest {
}

class Target {
}
Sign up to request clarification or add additional context in comments.

1 Comment

Stupid me, that is perfect! Merci Olivier!
0

So you want to make the overridden method accept a generic type that extends ItemRequest? You'll want to use a generic method, e.g:

<T extends ItemRequest> Target convert(T request);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.