[ 
https://issues.apache.org/jira/browse/AVRO-1468?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14075130#comment-14075130
 ] 

Keegan Witt commented on AVRO-1468:
-----------------------------------

Would the ability to do polymorphic interface references like this be out of 
the scope of this Jira?

{code}
{
  "type": "record",
  "name": "Cat", "namespace":"the.universe",
  "fields": [
    {"name":"name",
     "type":"string"},
    {"name":"collarSize",
     "type":"int"},
    {"name":"aloofness",
     "type":"int"},
  ]
}

{
  "type": "record",
  "name": "Dog", "namespace":"the.universe",
  "fields": [
    {"name":"name",
     "type":"string"},
    {"name":"collarSize",
     "type":"int"},
    {"name":"friendliness",
     "type":"int"},
  ]
}
{code}

{code}
public interface Pet {
  public String getName();
  public void setName(String name);
}

public class Cat implements Pet {
  // ...
}

public class Dog implements Pet {
  // ...
}

public class ExampleUsage {
  public static void main(String[] args) {
    List<Pet> pets = PetUtil.listPets();
    Map<String, Integer> petNames = new HashMap<>();
    for (Pet pet : pets) {
        petNames.put(pet.getname(), pet.getCollarSize());
    }
  }
}
{code}

> implement interface-based code-generation
> -----------------------------------------
>
>                 Key: AVRO-1468
>                 URL: https://issues.apache.org/jira/browse/AVRO-1468
>             Project: Avro
>          Issue Type: New Feature
>            Reporter: Doug Cutting
>
> The current specific compiler generates a concrete class per record.  
> Instead, we might generate an interface per record that might be implemented 
> in different ways.  Implementations might include:
>  - A wrapper for a generic record.  This would permit the schema that is 
> compiled against to differ from that of the runtime instance.  A field that 
> was added since code-generation could be retained as records are filtered or 
> sorted and re-written.
>  - A concrete record.  This would be similar to the existing specific.
>  - A wrapped POJO.  The generated class could wrap a POJO using reflection.  
> Aliases could map between the schema used at compilation and that of the 
> POJO, so field and class names need not match exactly.  This would permit one 
> to evolve from a POJO-based Avro application to using generated code without 
> breaking existing code.
> This approach was first described in http://s.apache.org/AvroFlex



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to