回答
簡短的回答是:你不知道。 Avro是一個序列化系統;所以爲了理解爲什麼靜態字段沒有被序列化,我們可以把目光放在Avro之外,一般來說就是序列化。這裏有幾個來自SO的資源。
要證明的Avro不序列靜態字段,我們可以使用ReflectData
來生成模式。
import org.apache.avro.Schema;
import org.apache.avro.reflect.ReflectData;
public class Main {
public static void main(String... args) {
Schema schema = ReflectData.get().getSchema(Main.Foo.class);
System.out.println(schema);
}
static class Foo {
public static final String FIELD = "field";
}
}
的輸出是:{"type":"record","name":"Foo","namespace":"thepackage.Main$","fields":[]}
通知字段的空數組。
沒有一個static
修改器領域,架構變爲:以上
{"type":"record","name":"Foo","namespace":"thepackage.Main$","fields":[{"name":"FIELD","type":"string"}]}
的鏈接解釋爲什麼序列化靜態字段是不必要的,不可取的,但我想你可以實現與單相同的效果元素枚舉。
不質疑Java如何處理序列化中的'static'值,而是參考將Avro用作類定義語言。你的答案從Avro的設計中是有意義的。 – bdparrish
我不完全確定_a類定義language_的意思,但我懷疑答案是Avro不是定義語言的類。根據它的[主頁](https://avro.apache.org/)_Apache Avro是一個數據序列化系統。也就是說,看看數據序列化系統如何被用作類定義語言;但我懷疑你會進入未知領域。 – jaco0646
類定義語言,這意味着我可以定義一個類結構,所以如果我有一個公共協議,那麼第三方可以利用我提供的'* .avsc'文件來處理他們正在使用的任何語言。我很驚訝Avro沒有像Thrift那樣提供一個恆定的定義。 – bdparrish
- 1. 在laravel中定義常量
- 2. 在TensorFlow中定義常量
- 3. 在express.js中定義常量
- 4. 在HTML中定義常量
- 5. 在Django中定義常量
- 6. Apache AVRO與休息
- 7. Apache Avro在文件處理中
- 8. 爲什麼Apache Avro使用JSON來定義模式?
- 9. 定義常量
- 10. CakePHP定義常量
- 11. 未定義常量
- 12. 在apache中使用JdbcIO訪問Hive拋出java.lang.NoClassDefFoundError:org/apache/avro/reflect/AvroSchema
- 13. 使用apache avro反射
- 14. Apache Avro for c#vs Microsoft.Avro.Core
- 15. PHP常量定義
- 16. 在#ifdef中定義常量C
- 17. 在java中定義映射爲常量
- 18. 在ActiveRecord :: Base中訪問常量定義
- 19. 在eclipse中未定義的常量
- 20. 如何在jboss drools中定義常量?
- 21. 在Java中定義一個常量
- 22. 可以在css中定義常量嗎?
- 23. 在Ruby中定義2個常量
- 24. 在C中定義函數常量
- 25. 在.NET/Visual Studio中定義TRACE常量
- 26. 如何在XSD中定義常量
- 27. 在模板類中定義的常量
- 28. 在Isabelle中定義重載常量
- 29. 在PHP中重新定義常量
- 30. 在協議中定義NSArray常量
如果你看一下[documentation](https://avro.apache.org/docs/1.7.7/api/java/constant-values.html),你會看到如何去做。也請看看這個[文檔](https://avro.apache.org/docs/1.6.0/api/java/constant-values.html) –
@ Skizo-ozᴉʞS不知道你給我看的是什麼。這是Avro API常量,而不是如何在我的模式中定義一個常量。 – bdparrish