接口中的Java泛型
我在Java中遇到了泛型问题,我在网上找不到以类似方式使用泛型的解决方案或示例。我有一组方法,它们位于相同的请求/响应结构中。例如,用户填充请求对象中的字段,将对象传递给帮助器方法,然后返回响应对象。我的所有请求对象都是从一个公共请求超类扩展而来的(类似地,响应对象也是从一个响应超类扩展而来的)。我希望我的助手类也有一个一致的结构,所以我使用了一个接口。下面是一些代码来说明 请求超级类:接口中的Java泛型,java,generics,interface,Java,Generics,Interface,我在Java中遇到了泛型问题,我在网上找不到以类似方式使用泛型的解决方案或示例。我有一组方法,它们位于相同的请求/响应结构中。例如,用户填充请求对象中的字段,将对象传递给帮助器方法,然后返回响应对象。我的所有请求对象都是从一个公共请求超类扩展而来的(类似地,响应对象也是从一个响应超类扩展而来的)。我希望我的助手类也有一个一致的结构,所以我使用了一个接口。下面是一些代码来说明 请求超级类: public class SuperRequest { // ... } public class
public class SuperRequest {
// ...
}
public class SuperResponse {
// ...
}
请求子类示例:
public class SubRequest extends SuperRequest {
// ...
}
public class SubResponse extends SuperResponse{
// ...
}
响应超级类:
public class SuperRequest {
// ...
}
public class SuperResponse {
// ...
}
响应子类示例:
public class SubRequest extends SuperRequest {
// ...
}
public class SubResponse extends SuperResponse{
// ...
}
界面:
public interface SomeInterface {
public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
}
在Eclipse中,我得到编译错误,因为编译器告诉我我有未实现的方法,并且@Override
符号“不重写超类型方法”
有人能帮我吗?是我的语法不正确还是我对泛型的理解有点不正确?非常感谢您的帮助 尝试将界面和实现更改为:
interface SomeInterface<T extends SuperRequest, U extends SuperResponse> {
public U someMethod(T request);
}
class SomeImplementation implements SomeInterface<SubRequest, SubResponse> {
@Override
public SubResponse someMethod(SubRequest request) {
return null;
}
}
interface-SomeInterface{
公共方法(T请求);
}
类SomeInterface实现SomeInterface{
@凌驾
公共子响应方法(子请求){
返回null;
}
}
目前,SomeInterface的实现必须实现参数化方法,即:
public <T extends SuperRequest, U extends SuperResponse> U someMethod(T request);
public方法(T请求);
它不能选择一个特定的子类来代替t
和U
接口本身必须是泛型的
SomeInterface
,然后子类可以为T
和U
选择具体的实现。在实现接口时,还必须声明类型。试试这个:
public class SomeImplementation implements SomeInterface<SubRequest,SubResponse> {
@Override
public SubResponse someMethod(SubRequest request) {
return null;
}
}
公共类SomeImplementation实现SomeInterface{
@凌驾
公共子响应方法(子请求){
返回null;
}
}
太棒了!我有一种感觉,我只是在语法/声明上有点偏离了。谢谢你的帮助!