You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues-all@impala.apache.org by "Paul Rogers (JIRA)" <ji...@apache.org> on 2018/11/18 22:56:00 UTC

[jira] [Updated] (IMPALA-7867) Expose collection interfaces, not implementations

     [ https://issues.apache.org/jira/browse/IMPALA-7867?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paul Rogers updated IMPALA-7867:
--------------------------------
    Description: 
When using Java collections, a common Java best practice is to expose the collection interface, but hide the implementation choice. This pattern allows us to start with a generic implementation (an {{ArrayList}}, say), but evolve to a more specific implementation to achieve certain goals (a {{LinkedList}} or {{ImmutableList}}, say.)

For whatever reason, the Impala FE code exposes {{ArrayList}}, {{HashMap}} and other implementation choices as variable types and in method signatures.

This ticket tracks a gradual process of revising the declarations and signatures to use the interfaces {{List}} instead of the implementation {{ArrayList}}.

Also, the FE code appears to predate Java 7, so that declarations of lists tend to be in one of two forms (with or without Guava):

{code:java}
foo1 = new ArrayList<Bar>();
foo2 = Lists.newArrayList();
{code}

Since Java 7, the preferred form is:

{code:java}
foo = new ArrayList<>();
{code}

  was:
When using Java collections, a common Java best practice is to expose the collection interface, but hide the implementation choice. This pattern allows us to start with a generic implementation (an {{ArrayList}}, say), but evolve to a more specific implementation to achieve certain goals (a {{LinkedList}} or {{ImmutableList}}, say.)

For whatever reason, the Impala FE code exposes {{ArrayList}}, {{HashMap}} and other implementation choices as variable types and in method signatures.

This ticket tracks a gradual process of revising the declarations and signatures to use the interfaces {{List}} instead of the implementation {{ArrayList}}.


> Expose collection interfaces, not implementations
> -------------------------------------------------
>
>                 Key: IMPALA-7867
>                 URL: https://issues.apache.org/jira/browse/IMPALA-7867
>             Project: IMPALA
>          Issue Type: Improvement
>          Components: Frontend
>    Affects Versions: Impala 3.0
>            Reporter: Paul Rogers
>            Assignee: Paul Rogers
>            Priority: Minor
>
> When using Java collections, a common Java best practice is to expose the collection interface, but hide the implementation choice. This pattern allows us to start with a generic implementation (an {{ArrayList}}, say), but evolve to a more specific implementation to achieve certain goals (a {{LinkedList}} or {{ImmutableList}}, say.)
> For whatever reason, the Impala FE code exposes {{ArrayList}}, {{HashMap}} and other implementation choices as variable types and in method signatures.
> This ticket tracks a gradual process of revising the declarations and signatures to use the interfaces {{List}} instead of the implementation {{ArrayList}}.
> Also, the FE code appears to predate Java 7, so that declarations of lists tend to be in one of two forms (with or without Guava):
> {code:java}
> foo1 = new ArrayList<Bar>();
> foo2 = Lists.newArrayList();
> {code}
> Since Java 7, the preferred form is:
> {code:java}
> foo = new ArrayList<>();
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-all-unsubscribe@impala.apache.org
For additional commands, e-mail: issues-all-help@impala.apache.org