说我有这个界面结构:
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) {
...
}
}
现在我想知道这是否可行。我不信。
当我创建CreatePartRequestConverter
时,重写方法的签名是超类型ItemRequest
。这是不可取的。
答案 0 :(得分:1)
我认为您的CreateItemRequestConverter类签名应该是这样的:
interface CreateItemRequestConverter<CIR extends CreateItemRequest>
extends ItemRequestConverter<CIR> {
}
测试:
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 {
}
答案 1 :(得分:0)
所以你想让重写的方法接受扩展ItemRequest的泛型类型?您将需要使用通用方法,例如:
<T extends ItemRequest> Target convert(T request);