JavaPOET - 只有类有超类,而不是INTERFACE

时间:2017-10-15 16:20:00

标签: java spring-boot code-generation javapoet

我正在尝试使用JavaPOET库为JPA存储库生成代码,但是 我正在“只有班级有超级课程,而不是INTERFACE”错误。

@Repository 
public interface UserRepository extends PagingAndSortingRepository<User, Long> { 
}

这是我试过的JavaPOET代码..

TypeSpec userRepository = TypeSpec.interfaceBuilder("UserRepository")
                .addAnnotation(Repository.class)
                .addModifiers(Modifier.PUBLIC)
                .superclass(ParameterizedTypeName.get(ClassName.get(PagingAndSortingRepository.class),  
                                                      ClassName.get(User.class),
                                                      ClassName.get(Long.class)))
                .build();

生成扩展类的接口的任何解决方案/最佳实践? 谢谢,

1 个答案:

答案 0 :(得分:1)

信息很明确:

  

&#34;只有班级有超级课程,而不是INTERFACE&#34;错误。

TypeSpec.Builder.superclass()确实只允许指定类 要指定界面,请使用TypeSpec.Builder.addSuperinterface()

它会给:

TypeSpec userRepository = TypeSpec.interfaceBuilder("UserRepository")
                .addAnnotation(Repository.class)
                .addModifiers(Modifier.PUBLIC)
                .addSuperinterface(ParameterizedTypeName.get(ClassName.get(PagingAndSortingRepository.class),  
                                                      ClassName.get(User.class),
                                                      ClassName.get(Long.class)))
                .build();

应生成此代码:

@org.springframework.data.repository.Repository
public interface UserRepository extends org.springframework.data.repository.PagingAndSortingRepository<User, java.lang.Long> {
}

您可以在JavaPOET项目的单元测试中找到完整的示例 请参阅git