如何将泛型方法的 return 重构为接口及其所有实现
How to refactor the return of a generic method to an interface and all its implementations
我会更改接口中声明的 return 类型,该接口在其他 10 个 class 方法中实现。
我正在使用 eclipse 作为 IDE ,
当前方法的签名是:
public List<T> findById(int id);
以及我需要的
public T findById(int id);
此致,圣地亚哥
正如@Andy Turner 在评论中指出的那样,您无法自动重构 return 列表以 return 列表元素之一。但是,需要采取一些步骤来安全地进行界面重构。
重命名界面中的列表 returning 方法。
对于最常见的解决方案,例如 returning 第一个元素,使用 TDD 在您的一个实现中编写新对象 returning 方法。新方法应该调用旧方法,return 新的 return 类型。不要使用下面的示例,它显然不安全,并且会在某些时候导致堆栈转储。
@Override
public T findById(int id){
List<T> res = findById(id);
return res.get(1);
}
更新接口以包含新方法签名。
对于每个使用已实施的相同解决方案的 class,复制并粘贴在步骤 2 中编写的新方法。
对于任何其他所需的实施重复步骤 2 和 4。
如果该方法是基class上的抽象方法,则步骤 2 中的初始方法将写在基 class.
上
我会更改接口中声明的 return 类型,该接口在其他 10 个 class 方法中实现。 我正在使用 eclipse 作为 IDE , 当前方法的签名是:
public List<T> findById(int id);
以及我需要的
public T findById(int id);
此致,圣地亚哥
正如@Andy Turner 在评论中指出的那样,您无法自动重构 return 列表以 return 列表元素之一。但是,需要采取一些步骤来安全地进行界面重构。
重命名界面中的列表 returning 方法。
对于最常见的解决方案,例如 returning 第一个元素,使用 TDD 在您的一个实现中编写新对象 returning 方法。新方法应该调用旧方法,return 新的 return 类型。不要使用下面的示例,它显然不安全,并且会在某些时候导致堆栈转储。
@Override public T findById(int id){ List<T> res = findById(id); return res.get(1); }
更新接口以包含新方法签名。
对于每个使用已实施的相同解决方案的 class,复制并粘贴在步骤 2 中编写的新方法。
对于任何其他所需的实施重复步骤 2 和 4。
如果该方法是基class上的抽象方法,则步骤 2 中的初始方法将写在基 class.
上