考虑到一个由许多实体组成的项目,我有一个服务需要知道实体的类型才能执行一个方法。我创造;
interface Service<T> {
String myMethod(T entity)
Class<T> getResponsibility()
和例如;
class FooService<Foo> {
String myMethod(Foo entity) { return 'foo'; }
Class<Foo> getResponsibility() { return Foo.class }
我想创建一个工厂来返回正确的Bean(我使用的是spring boot)来使用,我定义了这个Bean:
class ServiceFactory {
List<Service<?>> services;
@Autowired
public ServiceFactory(List<Service<?>> services) {
this.services = services;
}
Service getFor(Object entity) {
// Simplified for comprehension purpose
return this.services.stream().filter(service -> service.getResponsibility().equals(entity.getClass()).get();
}
这是可行的,但我有一个(声纳)警告说,我不应该“原始”使用service
作为工厂方法的返回类型。实现这一点的正确方法是什么?使用通配符是另一个警告。
目标是有一个返回正确bean的工厂。是最初的设计错了吗?
不传递对象,而是传递类本身并将其捕获为方法类型参数:
<T> Service<T> getFor(Class<T> type) {
问题内容: 在JDBC中,要连接和执行DB中的语句,我们主要使用Connection,Statement和ResultSet这两个接口。但是它们对应的对象后来用于运行诸如createStatement(),executeQuery(),next()等的方法。哪个类实现了这些方法?为什么将其称为连接对象而不是已实现的类对象? 问题答案: 在JDBC中,您首先需要通过调用来注册驱动程序 加载数据库类并
问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种
我试图重写ResponseErrorHandler接口,以便能够在2xx以外的任何响应情况下返回整个请求(状态代码、正文等)。 我注意到Spring(RestTemplate)默认情况下,如果响应不是2xx会返回异常。我不想返回异常,我只想能够返回: 但是我不明白如何在不更改方法返回的情况下返回ResponseEntity(我无法通过实现方法来实现)。 执行:
7.3. 实现接口的条件 一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口。例如,*os.File类型实现了io.Reader,Writer,Closer,和ReadWriter接口。*bytes.Buffer实现了Reader,Writer,和ReadWriter这些接口,但是它没有实现Closer接口因为它不具有Close方法。Go的程序员经常会简要的把一个具体的类型描述成
本文向大家介绍实现Runnable接口和Callable接口的区别?相关面试题,主要包含被问及实现Runnable接口和Callable接口的区别?时的应答技巧和注意事项,需要的朋友参考一下 如果想让线程池执行任务的话需要实现的Runnable接口或Callable接口。 Runnable接口或Callable接口实现类都可以被ThreadPoolExecutor或ScheduledThreadP
问题内容: 有没有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的接口,在90%的情况下,我想要的功能是相同的。 我的第一个直觉是用静态方法创建一个具体的类。然后,当我想要默认功能时,可以将功能委托给静态方法。 这是一个简单的示例: 接口 方法的具体实现 使用默认功能的具体实现 这里有更好的方法吗? 编辑 在看到了一些建议的解决方案之后,我认为我应该更加清楚自己的意图。本质上,我正在尝试