[ 
https://issues.apache.org/jira/browse/HADOOP-3048?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12584171#action_12584171
 ] 

Enis Soztutar commented on HADOOP-3048:
---------------------------------------

bq. I'm uncomfortable with GenericsUtil. It can't be denied that Java generics 
have some fiercely annoying properties, but factoring this out is probably the 
wrong solution. 
I cannot understand why we do not want to separate the functionality to deal 
with generics. The proposed functions are fairly general and can be used by 
others, and it seems that we cannot get rid of them(please see below), so 
extracting this out is better than introducing ad hoc solutions. 

bq. Where GenericsUtil::getClass(T) is called, Class::asSubclass(Class) should 
be preferred. 
we cannot use Class::asSubclass(Class) get a Class<T> object where T is a 
generic type, because then we would use : 
{code}
T item; 
Class<T> c = item.getClass().asSubclass(  <cannot_fill>  );
{code}
in the above code, we cannot write anything as an argument to getSubclass, 
since we do not have any object of type Class<T>. (if we had then why would we 
bother getting an object of the same type). GenericsUtil#getClass(T) is 
introduced to handle the repetitive pattern of 
{code}
@SuppressWarnings("unchecked")
Class<T> c = (Class<T>)t.getClass(); 
{code}

bq. Similarly, GenericsUtil::toArray is called from a function that's 
destringifying and deserializing objects. It's not statically-checkable code, 
the casts are wholly justified, and the warning should be suppressed. Contexts 
where toArray might be useful should typically prefer the equally typesafe 
implementation in ArrayList (this case included).

Unfortunatelly, we cannot use ArrayList#toArray(T[] a), since creating a 
generic array is not allowed, similarly ArrayList#toArray() will not work 
either, since it returns an Object[] and casting Object[] to T[] is not 
possible. Thus we needed a method to do the job of returning a generic array 
from a List, that's why we have GenericsUtil::toArray(). The above cases are 
clearly demonstrated in TestGenericsUtil#testWithGenericClass().

bq. Since separator is a constant, it should be in all caps
I would change that, if it matters. 

> Stringifier
> -----------
>
>                 Key: HADOOP-3048
>                 URL: https://issues.apache.org/jira/browse/HADOOP-3048
>             Project: Hadoop Core
>          Issue Type: New Feature
>    Affects Versions: 0.17.0
>            Reporter: Enis Soztutar
>            Assignee: Enis Soztutar
>            Priority: Blocker
>             Fix For: 0.17.0
>
>         Attachments: stringifier_v1.patch, stringifier_v2.patch, 
> stringifier_v3.patch, stringifier_v4.patch, stringifier_v5.patch
>
>
> Storing arbitrary objects in the configuration has been discussed before in 
> HADOOP-449 and HADOOP-1873. Although enabling such functionality has the risk 
> of encouraging people to put big binary objects in the configuration, for 
> some use cases passing objects to tasks is absolutely necessary. 
> This issue will track the implementation of a Stringifier interface which 
> stringifies and destringifies objects. Using this implementation, developers 
> can store objects in the configuration and restore them later. 
> Any thoughts ?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to