Tag: 参数化类型

Apache Avro框架可以在序列化期间处理参数化类型吗?

Apache Avro可以在序列化期间处理参数化类型吗? 当我尝试序列化使用generics的实例时,我看到从Avro框架抛出此exception – org.apache.avro.AvroTypeException: Unknown type: T at org.apache.avro.specific.SpecificData.createSchema(SpecificData.java:255) at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:514) at org.apache.avro.reflect.ReflectData.createFieldSchema(ReflectData.java:593) at org.apache.avro.reflect.ReflectData$AllowNull.createFieldSchema(ReflectData.java:75) at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:472) at org.apache.avro.specific.SpecificData.getSchema(SpecificData.java:189) 我尝试序列化的类看起来像这样 public class Property { private T propertyValue; } 我正在尝试根据传入的POJO实例动态生成架构。 我的序列化代码如下所示 – ByteArrayOutputStream os = new ByteArrayOutputStream(); ReflectData reflectData = ReflectData.AllowNull.get(); Schema schema = reflectData.getSchema(propertyValue.getClass()); DatumWriter writer = new ReflectDatumWriter(schema); Encoder encoder = EncoderFactory.get().jsonEncoder(schema, os); […]

为什么java中的“超类型令牌”模式需要匿名类

在Neal Gafter的“超类型令牌”模式( http://gafter.blogspot.com/2006/12/super-type-tokens.html )中,使用匿名对象传递参数化类型: class ReferenceType{} /* anonymous subclass of “ReferenceType” */ ReferenceType<List> referenceType = new ReferenceType<List>(){ }; Type superClass = b.getClass().getGenericSuperclass(); System.out.println(“super type : ” + superClass); Type genericType = ((ParameterizedType)superClass).getActualTypeArguments()[0]; System.out.println(“actual parameterized type : ” + genericType); 然后结果是: super type : com.superluli.test.ReferenceType<java.util.List> actual parameterized type : java.util.List 我的问题是,匿名对象“referenceType”的作用是什么让它起作用? 如果我定义一个“ReferenceType”的显式子类并使用它而不是匿名样式,它就不会如预期的那样。 class ReferenceType{} class ReferenceTypeSub […]