[ https://issues.apache.org/jira/browse/THRIFT-2531?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13998717#comment-13998717 ]
Jeremiah Menétrey commented on THRIFT-2531: ------------------------------------------- I removed a pretty dumb example code from the issue description, as it would not even compile :/ > Generate Interface for thrift objects > ------------------------------------- > > Key: THRIFT-2531 > URL: https://issues.apache.org/jira/browse/THRIFT-2531 > Project: Thrift > Issue Type: Improvement > Components: Java - Compiler > Affects Versions: 0.7, 0.9.1 > Environment: Java 6 > Reporter: Jeremiah Menétrey > Labels: features > > Currently, generated thrift objects implement the TBase interface, which > defines generic methods applicable to all generated objects (read/write from > protocol objects, retrieving a field value by specifying the field ID). > My request is for the generation of an interface for each thrift object, > which in turn implement that interface. > The interface should contain all getters and setters for the fields specified > in the thrift definition (e.g. {{getXXX()}}, {{setXXX(...)}}, {{isXXXSet()}}, > etc.). > All those methods are already generated for thrift objects, they just should > also be declared in an interface for each object. > *Rationale* > This will allow to use Java's dynamic proxies to decorate and manipulate > thrift objects. > Java's reflective framework ({{Proxy}} and {{InvocationHandler}}) work with > interfaces and are not able to manage classes as proxyed types. E.g. it is > not possible to cast a proxy for an instance of {{MyType}} to a variable of > type {{MyType}} if {{MyType}} is not an interface. > Thus, if the class {{MyType}} defines getters and setters, the user will not > be able to use them behind a dynamic proxy as casting the proxy to {{MyType}} > will throw a {{ClassCastException}}. > {code} > public interface MyIFace { ... } > public class MyClass implements MyIFace { ... } > {code} > {code} > // proxify(MyClass instance) is implemented somewhere > // The proxy has to declare proxying for an interface (MyIFace) or it won't > even compile. > MyIFace f = (MyIFace) proxify(new MyClass()) // OK > MyClass x = (MyClass) proxify(new MyClass()) // Throws ClassCastException > {code} -- This message was sent by Atlassian JIRA (v6.2#6252)