【发布时间】:2020-01-21 06:59:07
【问题描述】:
我有一个旧代码库,需要使用 Java 8 重构,所以我有一个接口,它告诉我当前站点是否支持该平台。
public interface PlatformSupportHandler {
public abstract boolean isPaltformSupported(String platform);
}
我有多个实现它的类,每个类支持不同的平台。
一些实现类是:
@Component("bsafePlatformSupportHandler")
public class BsafePlatoformSupportHandler implements PlatformSupportHandler {
String[] supportedPlatform = {"iPad", "Android", "iPhone"};
Set<String> supportedPlatformSet = new HashSet<>(Arrays.asList(supportedPlatform));
@Override
public boolean isPaltformSupported(String platform) {
return supportedPlatformSet.contains(platform);
}
}
另一种实现:
@Component("discountPlatformSupportHandler")
public class DiscountPlatoformSupportHandler implements PlatformSupportHandler{
String[] supportedPlatform = {"Android", "iPhone"};
Set<String> supportedPlatformSet = new HashSet<>(Arrays.asList(supportedPlatform));
@Override
public boolean isPaltformSupported(String platform) {
return supportedPlatformSet.contains(platform);
}
}
在我的过滤器运行时,我得到了我想要的所需 bean:
platformSupportHandler = (PlatformSupportHandler) ApplicationContextUtil
.getBean(subProductType + Constants.PLATFORM_SUPPORT_HANDLER_APPEND);
并致电isPlatformSupported 了解我当前的站点是否支持以下平台。
我是 Java 8 的新手,有什么方法可以在不创建多个类的情况下重构此代码?由于接口只包含一个方法,我能不能用 lambda 来重构它?
【问题讨论】:
-
抛开春天,当然:你所做的只是对集合进行包含检查。将集合作为构造函数参数注入。