Hi guys,

Avro spec allows us to have an array of unions. Would you please tell me how to 
construct such schemas using reflection?

1. For classes

It's easy

```java
public class Human extends Kind {
  String name = "Andy";
  ArrayList<Human> friends = new ArrayList<>();
}

public class Machine extends Kind {
  String name = "BB-8";
}

@Union({ Human.class, Machine.class })
public  class Kind extends Object {
  
}
public class Meta {
  @Nullable
  List<Kind> kinds;
}
public void testDefaults() {
  Schema schema = ReflectData
        .get()
        .getSchema(Meta.class);
  System.out.println(schema.toString(true));
}
```

2. For enums

I'm stuck because enums can be derived.

I think we should have an annotation named as @Items. For example:

```java
enum First{}

enum Second{}

public class Meta {
  @Items(Human.class, Machine.class)
  List<Object> kinds;

  @Items(First.class, Second.class)
  List<Object> ranks;
}
``

Please let me know what you think about this suggestion.

Thank you in advance.

Reply via email to