【问题标题】:JavaPOET - only classes have super classes, not INTERFACEJavaPOET - 只有类有超类,没有 INTERFACE
【发布时间】:2018-03-27 04:50:50
【问题描述】:

我正在尝试使用 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();

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

【问题讨论】:

    标签: java spring-boot code-generation javapoet


    【解决方案1】:

    信息很清楚:

    “只有类有超类,没有INTERFACE”错误。

    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

    【讨论】:

    • 非常感谢它的工作。你能不能给我一个在运行时编译这个生成的代码的方法,这样它就可以在不重新部署的情况下工作。据我所知,JavaPOET 没有这种能力,对吧?如果你想让我为此发布另一个问题。没关系。
    • 不客气。抱歉,我对这个库了解不多。这个问题可能你会感兴趣:github.com/square/javapoet/pull/396.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多