如何在我的Apple类中生成BigDecimal?现在我只有一个字节缓冲符。。。。
使用Avro模式(avsc):
{"namespace": "com.example",
"type": "record",
"name": "Apple",
"fields": [
{"name": "price", "type": {
"type": "bytes",
"logicalType": "decimal",
"precision": 9,
"scale": 2
}}
]
}
使用IDL:
@namespace("com.example")
protocol AppleProtocol {
record Apple {
@java-class("java.math.BigDecimal") decimal(9,2) price;
}
}
使用maven生成方法mvn clean compile和以下maven代码段:
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.8.2</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<sourceDirectory>${project.basedir}/src/main/avro</sourceDirectory>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
这两种方法都返回了这个丑陋的方法,显然几乎无法使用。。。
public void setPrice(java.nio.ByteBuffer value) {
this.price = value;
}
如何使此方法请求BigDecimal?这是使用Avro
要使生成的类使用BigDecimal而不是ByteBuffer表示十进制逻辑类型,请将Avro Maven插件配置参数enableDecimalLogicalType
设置为true。
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.8.2</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
<goal>idl-protocol</goal>
</goals>
<configuration>
<enableDecimalLogicalType>true</enableDecimalLogicalType>
</configuration>
</execution>
</executions>
</plugin>
2(名)-约翰 3(型号)-客车 4(attr_hash)-由java哈希代码计算
使用Avro Java API,我可以创建一个简单的记录模式,如下所示: 如何使用逻辑类型标记架构字段,具体而言:https://avro.apache.org/docs/1.8.1/api/java/org/apache/avro/LogicalTypes.TimestampMillis.html
问题内容: 问题是,由于某种原因。除了基本属性,设置器和获取器之外,xsd不能/不能定义所有逻辑变量,因此我们尝试通过xsd定义“注入代码”,而其他人实际上已经讨论了两次。我对带有“简单java方法”的“简单注入”没有任何问题,该类不需要在类def之上的任何“导入”语句。 但是如果我们想使用它的话。在我看来,除了setter或getters之外,我们无法获取或导入任何软件包。,请参阅下面的详细信息
问题内容: 我碰到了Java行,并对它的输出感到困惑。您能否解释一下此代码背后的逻辑 输出: 问题答案: 好吧,它等效于: 真正地将原始内容显式转换为只是使其调用而不是。 我相信to 转换 实际上首先 要进行隐式加宽转换-就像这样: 这些帮助有用?
问题内容: 最新的Avro编译器(1.8.2)使用基于Joda-Time的实现为日期逻辑类型生成Java源。如何配置Avro编译器以生成使用Java 8日期时间API的源? 问题答案: 目前(avro 1.8.2)这是不可能的。它被硬编码以生成Joda日期/时间类。 当前分支已切换到Java 8,并且存在一个未解决的问题(使用Pull Request )来添加生成具有类型的类的功能。 不幸的是,我
问题内容: 为什么在下面的程序中不执行func3?在func1之后,不需要对func2进行评估,但是对于func3,不是吗? 问题答案: 您正在使用短路或。如果第一个参数为true,则整个表达式为true。 如果添加编译器使用的隐式括号可能会有所帮助 编辑 :正如Chris Jester-Young所说,这实际上是因为逻辑运算符必须从左到右的关联性: func1返回之后,它变为: 评估短路或后,它