Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型这两种方法具有相同的擦除错误_Java_Generics - Fatal编程技术网

Java泛型这两种方法具有相同的擦除错误

Java泛型这两种方法具有相同的擦除错误,java,generics,Java,Generics,在我的项目中,我有多个服务执行三个基本操作:创建、编辑和搜索。为此,我尝试创建一个通用服务。下面是我到目前为止的想法 搜索方法将在运行时获取对象列表 public interface GenericService<T> { void update(T t); void create(T t); T search(List<?> t); } 搜索条件类 public class SearchCriteria { private S

在我的项目中,我有多个服务执行三个基本操作:创建、编辑和搜索。为此,我尝试创建一个通用服务。下面是我到目前为止的想法

搜索方法将在运行时获取对象列表

public interface GenericService<T> {

   void update(T t);

   void create(T t);

   T search(List<?> t);
}
搜索条件类

 public class SearchCriteria {
        private String key;
        private String value;
        // getter setter removed for brevity
    }
问题:联机公共帐户搜索(列表t){return null;},获取编译错误

中的“搜索(列表)” “com.test.AccountService”与 “com.test.GenericService”中的“搜索(列表)”; 两种方法具有相同的擦除,但都不重写另一种方法

GenericService
中的
List
更改为
List
,将解决此错误。如果
search
方法在每个服务实现中总是包含
SearchCriteria
对象列表,那么使用通配符没有任何好处

但是,如果您也希望将此设置为泛型,则可以引入第二个类型参数。

以便

public Account search(List<SearchCriteria> t) { ...}

将界面中的
search
中的
List
更改为
List
@Schred-我也尝试过-它会产生以下编译错误:“com.optdesk.core.service.test.AccountService”中的“search(List)”与“com.optdesk.core.service.test.GenericService”中的“search(List)”冲突;这两种方法具有相同的擦除,但都不覆盖另一种方法。您的搜索方法真的可以获取任何内容的列表吗?您不能在接口定义中使用SearchCriteria吗?是的,它可以获取任何内容的列表。我真的需要理解为什么在当前的实现中编译失败,因为你救了我一天
public class Account {
    private String accountNumber;
    private Date openingDate;
    // more fields
    // getter setter removed for brevity
}
 public class SearchCriteria {
        private String key;
        private String value;
        // getter setter removed for brevity
    }
public Account search(List<SearchCriteria> t) { ...}
T search(List<?> t);
public interface GenericService<T, C> {
   // ...
   T search(List<C> t); // probably change that parameter name
}

public abstract class AbstractService<T, C>
        implements GenericService<T, C>
{
}

public class AccountService
        extends AbstractService<Account, SearchCriteria>
        implements GenericService<Account, SearchCriteria> // unnecessary
{
    // ...
    @Override
    public Account search(List<SearchCriteria> t) { /* ... */ }
}