Java Spring引导服务方法返回接口页
假设我有一个界面Java Spring引导服务方法返回接口页,java,spring,spring-boot,Java,Spring,Spring Boot,假设我有一个界面东西,如下所示: public interface Stuff { Long getId(); String getName(); } public interface StuffService { Page<? extends Stuff> getStuff(Pageable pageable); } 我将此接口实现为StuffEntity: @Entity public class StuffEntity implements Stuff {
东西
,如下所示:
public interface Stuff {
Long getId();
String getName();
}
public interface StuffService {
Page<? extends Stuff> getStuff(Pageable pageable);
}
我将此接口实现为StuffEntity
:
@Entity
public class StuffEntity implements Stuff {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
protected String name;
// constructors, getters (implement interface methods), setters, ...
}
我有一个服务接口StuffService
:
public interface StuffService {
Page<Stuff> getStuff(Pageable pageable);
}
我不喜欢在这里强制转换并创建PageImpl
的新实例,因此我尝试了以下方法:
public interface Stuff {
Long getId();
String getName();
}
public interface StuffService {
Page<? extends Stuff> getStuff(Pageable pageable);
}
公共接口服务{
Page最好不要使用通配符类型作为返回类型
强烈建议不要将通配符类型用作返回类型。
由于类型推断规则相当复杂,因此
该API的用户将知道如何正确使用它
让我们以返回“List的方法为例,最好不要使用通配符类型作为返回类型
强烈建议不要将通配符类型用作返回类型。
由于类型推断规则相当复杂,因此
该API的用户将知道如何正确使用它
让我们以返回“列表”的方法为例,“我不太担心服务的客户端”为什么?客观上第二个更好。我认为页面是?或者如果不是,它至少是只读的,即您不能向页面中添加项目?在这种情况下,适用。它是生产者,所以扩展是正确的选择。我担心客户端,因为现在它必须处理通配符。但是是的,返回的页面应该是只读。此外,它永远不会是多种类型的Stuff
的集合,但我可能有公共类StuffOtherImpl实现Stuff
和公共类StuffServiceOtherImpl实现StuffService
,它们将返回StuffOtherImpl
的页面对于实体的接口,这通常是要避免的。@M.Deinum beeecause…?“我不太担心服务的客户端”为什么?客观上第二个更好。我认为页面是?或者如果不是,它至少是只读的,即您不能向页面中添加项目?在这种情况下,适用。它是生产者,所以扩展是正确的选择。我担心客户端,因为现在它必须处理通配符。但是是的,返回的页面应该是只读。此外,它永远不会是多种类型的Stuff
的集合,但我可能有公共类StuffOtherImpl实现Stuff
和公共类StuffServiceOtherImpl实现StuffService
,它们将返回StuffOtherImpl
的页面对于实体的接口,这通常是要避免的。@M.Deinum beeecause…?仅链接的答案不是好的答案,慈善机构的投票也不是好的投票。@Kayaman告诉人们如何使用他们的投票是浪费时间和精力的,人们会做他们想做的事,即使这个答案来自“权威机构”像Sonar这样的来源。整个理由似乎是你不能添加到列表中。好吧,如果它不是一个集合呢?OP有一个页面,不可能添加到一个页面中。似乎PECS适用。我不同意“该API的用户不太可能知道如何正确使用它”只有链接的答案不是好的答案,慈善机构的投票也不是好的投票。@Kayaman告诉人们如何使用他们的投票是浪费时间和精力的,人们会做他们想做的事情。尽管这个答案来自“权威”网站像Sonar这样的来源。整个理由似乎是你不能添加到列表中。好吧,如果它不是一个集合呢?OP有一个页面,不可能添加到一个页面中。似乎PECS适用。我不同意“该API的用户不太可能知道如何正确使用它”