如何使用java泛型删除重复代码

如何使用java泛型删除重复代码,java,generics,java-8,Java,Generics,Java 8,我有以下几种方法 之前: Employee getEmployee(String id){ String url = "http://localhost" + id; //duplicate code } List<Employee> getEmployees(){ String url = "http://localhost"; //duplicate code } <T> T get(id){ //here duplicate code from ab

我有以下几种方法

之前:

Employee getEmployee(String id){
  String url = "http://localhost" + id;
//duplicate code
}


List<Employee> getEmployees(){
  String url = "http://localhost";
//duplicate code
}
<T> T get(id){

//here duplicate code from above 2 methods
}


Employee getEmployee(String id){
  return get(id);
}

List<Employee> getEmployees(){
 return get(null);
}
Employee-getEmployee(字符串id){
字符串url=”http://localhost“+id;
//重复代码
}
员工名单(){
字符串url=”http://localhost";
//重复代码
}
在以上两种方法中,我有重复的代码,我尝试了以下方法:

之后:

Employee getEmployee(String id){
  String url = "http://localhost" + id;
//duplicate code
}


List<Employee> getEmployees(){
  String url = "http://localhost";
//duplicate code
}
<T> T get(id){

//here duplicate code from above 2 methods
}


Employee getEmployee(String id){
  return get(id);
}

List<Employee> getEmployees(){
 return get(null);
}
T获取(id){
//这里重复上述两种方法的代码
}
Employee getEmployee(字符串id){
返回get(id);
}
员工名单(){
返回get(null);
}

我是泛型新手,如何解决上述重复问题

乍一看,您似乎有下一个选择:

  • 如果您确定,“复制的代码”总是返回正确的类型,那么您可以始终强制转换(可能会导致运行时问题) 但这与泛型无关,返回类型不能依赖于null或not
  • Employee-getEmployee(字符串id){
    返回(员工)获取(id);
    }
    员工名单(){
    返回(列表)获取(空);
    }
    
  • 另一个选项是始终在方法get中返回列表,并在方法getEmployee中简单地获取第一项(不要忘记检查它是否为空,以避免IndexOutOfBoundsException)

  • 我相信会有更好的选择。你也可以分享被移除的部分,也许可以改进。老实说,我担心它是否完全相同。

    如果代码确实是完全重复的,那么就不需要泛型。只需将重复的代码提取到私有方法中即可。@orSt如何返回动态返回类型?@john如何处理传递的
    null
    ?我想知道为什么代码是重复的?您是否从某处获取
    id
    s列表,并以
    getAllEmployees
    的名义为其执行
    get(id)
    ?使用公共代码创建一个私有方法。以上是一种经常发生的模式,任何一方都应该接受这种重复。但是千万不要使用像
    get(null)
    这样的东西。