You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Doug Cutting (JIRA)" <ji...@apache.org> on 2013/02/27 20:59:13 UTC

[jira] [Commented] (AVRO-1261) Honor schema defaults with the Constructor in addition to the builders.

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

Doug Cutting commented on AVRO-1261:
------------------------------------

The no-arg constructor is also used to create instances when reading.  Setting field defaults in this case may harm performance, especially when new copies of mutable default values are allocated each time.  Similarly, setting field values to defaults when writing may harm performance when the application overwrites the default.  In general, there are cases where it's probably fastest to create instances without defaults set.  Currently the no-arg constructor serves this purpose and the Builder API supports the case where defaults are desired.

Perhaps we could better document this?  The generated no-arg constructor might include javadoc cautioning that no default values are set and that the builder should be used if they're desired?
                
> Honor schema defaults with the Constructor in addition to the builders.
> -----------------------------------------------------------------------
>
>                 Key: AVRO-1261
>                 URL: https://issues.apache.org/jira/browse/AVRO-1261
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.7.4
>            Reporter: Christopher Conner
>            Priority: Minor
>
> As I understand it, currently if you want to utilize defaults in a schema, ie:
> { 
> "namespace": "com.chris.test", 
> "type": "record", 
> "name": "CHRISTEST", 
> "doc": "Chris Test", 
> "fields": [ 
> {"name": "firstname", "type": "string", "default": "Chris"}, 
> {"name": "lastname", "type": "string", "default": "Conner"}, 
> {"name": "username", "type": "string", "default": "cconner"}
> ] 
> }
> Then I have to use the builders to create my objects.  IE:
> public class ChrisAvroTest {
> public static void main(String[] args) throws Exception {
> CHRISTEST person = CHRISTEST.newBuilder() 
> .build(); 
> System.out.println("person:" + person);
> } 
> }
> Is my understanding correct?  Is it possible to make it so the default constructor as well?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira