2017-10-15 1 views
0

Ich versuche, Code für JPA-Repository unten mit JavaPOET-Bibliothek zu generieren, aber ich bekomme "nur Klassen haben Super-Klassen, nicht INTERFACE" Fehler.JavaPOET - nur Klassen haben Super-Klassen, nicht INTERFACE

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

Hier ist der JavaPOET Code habe ich versucht ..

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

Jede Lösung/Best-Practice-Schnittstelle zur Erzeugung einer Klasse erweitern? Danke,

Antwort

1

Die Botschaft ist ziemlich klar:

"nur Klassen Superklassen, nicht INTERFACE" Fehler.

TypeSpec.Builder.superclass() tatsächlich erlaubt, nur Klassen anzugeben.
Um eine Schnittstelle anzugeben, verwenden Sie TypeSpec.Builder.addSuperinterface().

Es würde:

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

Es sollte diesen Code generieren:

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

Sie komplette Beispiele in den Unit-Tests des JavaPOET Projekt finden können.
Siehe git.

+0

Vielen Dank, es hat funktioniert ... Könnten Sie mir auch eine Möglichkeit vorschlagen, diesen generierten Code zur Laufzeit zu kompilieren, damit er ohne erneute Implementierung funktionieren kann. Soweit ich weiß, hat JavaPOET diese Fähigkeit nicht richtig? Wenn Sie möchten, dass ich eine andere Frage dazu stelle. Das ist ok. – mrgenco

+0

Gern geschehen. Entschuldigung, ich weiß nicht viel davon. Dieses Problem könnte Sie vielleicht interessieren: https://github.com/square/javapoet/pull/396. – davidxxx

Verwandte Themen