Java 如何返回实现列表?
我正在创建一个应用程序,将用于在各个商店下订单。每个商店都有不同的下单方式。现在看起来是这样的:Java 如何返回实现列表?,java,spring,domain-driven-design,Java,Spring,Domain Driven Design,我正在创建一个应用程序,将用于在各个商店下订单。每个商店都有不同的下单方式。现在看起来是这样的: @文档(“订单”) 公共类顺序扩展了AbstractAggregateRoot{ 私有UUID; 私人店铺; 私人产品; //已跳过其他字段和方法 } 公共抽象类商店{ 私有字符串baseUrl; 抽象无效定单(…); //已跳过其他字段和方法 } 公共类XYZShop扩展商店{ @凌驾 作废定单(…){ //方法的实现 } //已跳过其他字段和方法 } 当客户创建订单时,他应该能够选择要在哪
@文档(“订单”)
公共类顺序扩展了AbstractAggregateRoot{
私有UUID;
私人店铺;
私人产品;
//已跳过其他字段和方法
}
公共抽象类商店{
私有字符串baseUrl;
抽象无效定单(…);
//已跳过其他字段和方法
}
公共类XYZShop扩展商店{
@凌驾
作废定单(…){
//方法的实现
}
//已跳过其他字段和方法
}
当客户创建订单时,他应该能够选择要在哪个商店下订单
如何获取可用商店的列表?或者我应该以不同的方式实现这样的逻辑吗?我非常不方便的方法是:
public Test3()
{
Class<?> parentClass = this.getClass().getSuperclass();
if(Extenders.extendingClasses.containsKey(parentClass.getCanonicalName()))
{
Extenders.extendingClasses.get(parentClass.getCanonicalName()).add(this.getClass());
}
else
{
List<Class<?>> extenders = new ArrayList<>();
extenders.add(this.getClass());
Extenders.extendingClasses.put(parentClass.getCanonicalName(), extenders);
}
}
public static void main(String[] args)
{
Test3 tmp = new Test3();
for(Entry<String,List<Class<?>>> entry : Extenders.extendingClasses.entrySet())
{
System.out.println("Class "+entry.getKey()+" is extended by: ");
for(Class<?> clazz : entry.getValue())
{
System.out.print(clazz.getCanonicalName()+", ");
}
}
}
还有一个单身汉
public class Extenders {
public static Map<String,List<Class<?>>> extendingClasses = new TreeMap<>();
}
在这一点上我可能是错的:但据我所知,超级类不知道它被扩展了 所以基本上更方便的方法是把这些实现的列表放在某个地方?我指的是一些属性文件或数据库。也许Class.forName(String)方法是您的一个选择。这样,您就可以通过选择店铺(例如XYZ)和后缀店铺。这仍然没有列表,但可能已经为您的用例提供了足够的功能。就个人而言,我可能会使用一个接口,并通过开关大小写或Class.forName(字符串)选择实现类型。
public class Extenders {
public static Map<String,List<Class<?>>> extendingClasses = new TreeMap<>();
}
Class Test2 is extended by:
Test3,