gpt4 book ai didi

java - java 中的工厂模式和泛型

转载 作者:行者123 更新时间:2023-11-30 06:24:37 26 4
gpt4 key购买 nike

我在针对特定用例使用泛型实现工厂时遇到问题

我有模型类:

class BaseModel { }

class ModelA extends BaseModel { }

class ModelB extends BaseModel { }

以及相应的服务:

class Service<T extends BaseModel> { }

class ServiceA extends Service<ModelA> {}

class ServiceB extends Service<ModelB> {}

我的工厂类,根据它服务的模型创建服务:

class Factory {
private Map<Class<? extends BaseModel>, Class<? extends Service>> registry;

Factory(){
registry = new HashMap<>();
registry.put(ModelA.class, ServiceA.class);
registry.put(ModelB.class, ServiceB.class);
}

Service getService(Class<? extends BaseModel> clazz) throws IllegalAccessException, InstantiationException {
return registry.get(clazz).newInstance();
}
}

还有一个使用工厂的类

class Handler<T extends BaseModel>{
private Service<T> myService;

Handler(Class<T> modelClass) {
Factory fact = new Factory();
try {
myService = fact.getService(modelClass);
} catch (IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
}
}

我收到使用工厂获取服务的线路的警告:

"Unchecked assignment 'Service' to 'Service<T>'"

我明白为什么我收到这条消息,因为 getService方法返回 Service ,但我需要Service<T>并对如何更改代码以获得 Service<T> 感到困惑

有什么建议吗?

谢谢!

最佳答案

在这里,您可以将类捕获为 T 并返回它的实例(使用强制类型转换):

<T extends BaseModel> Service<T> getService(Class<T> clazz) throws IllegalAccessException, InstantiationException {
return (Service<T>) registry.get(clazz).newInstance();
}

关于java - java 中的工厂模式和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47464741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com