JavaPOET - 只有类有超类,不是接口

问题描述:

我想下面生成使用JavaPOET库,但 我得到为JPA库代码“只类有超类,而不是接口”错误。JavaPOET - 只有类有超类,不是接口

@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(); 

任何溶液/最佳做法? 谢谢,

的信息是相当清楚的:

“只类有超类,而不是接口” 的错误。

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

+0

非常感谢它的工作..你还可以建议我一种在运行时编译这个生成的代码的方式,以便它可以在不重新部署的情况下工作。据我所知,JavaPOET没有这种能力吗?如果你想让我为此发布另一个问题。没关系。 – mrgenco

+0

不客气。对不起,我不知道这个lib很多。这个问题可能会让你感兴趣:https://github.com/square/javapoet/pull/396。 – davidxxx