commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benedikt Ritter <brit...@apache.org>
Subject Re: svn commit: r1525711 - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/reflect/TypeLiteral.java main/java/org/apache/commons/lang3/reflect/Typed.java test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
Date Wed, 25 Sep 2013 19:07:11 GMT
2013/9/24 Matt Benson <gudnabrsam@gmail.com>

> On Sep 24, 2013 10:48 AM, "Benedikt Ritter" <beneritter@gmail.com> wrote:
> >
> > Hi Matt,
> >
> > > Am 24.09.2013 um 01:24 schrieb Matt Benson <gudnabrsam@gmail.com>:
> > >
> > > <grumpy>
> > >  This is why I submitted this in JIRA first and let it sit Friday
> > > afternoon, all weekend, and basically all day Monday before committing.
> > > </grumpy>
> >
> > Although I'm subscribed to the jira ML, I don't follow the list as
> careful as I follow the dev ML. Since you seem to have been unsure about
> whether to add this feature or not, maybe you should have asked for
> opinions on the dev ML first.
>
> Well, we're here now. What's your opinion?
>

To be honest I'm undecided here. I'd say if we need this for other API
functionality it can stay. For now it feels not only like a replication of
CDI, but also of other OSS libs as you have pointed out :-)

OTOH it's bad to have a swiss army knife that's missing a screwdriver...


>
> Matt
>
> >
> > Regards,
> > Benedikt
> >
> > >
> > > IMO the CDI API, however small in binary terms, is a rather large
> > > dependency *conceptually*.  In just a few minutes I have dug up three
> > > similar OSS classes [1, 2, 3] I remember having encountered (not
> including
> > > my own, from which the proposed changes were extracted) whose existence
> > > seems to support me in this opinion.  I wouldn't be at all surprised to
> > > find more out there.  I reiterate that [lang]'s mission is to provide
> where
> > > Java SE is lacking.  Finally, the suggested change arguably improves
> upon
> > > other solutions by providing an abstraction in terms of which
> TypeLiteral
> > > instances can be handled compatibly with user custom types.  I submit
> that
> > > these comprise the "good argument" you have requested.
> > >
> > > Matt
> > > [1]
> > >
>
> http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/reflect/TypeToken.html
> > > [2]
> > >
>
> http://fasterxml.github.io/jackson-core/javadoc/2.2.0/com/fasterxml/jackson/core/type/TypeReference.html
> > > [3]
> > >
>
> https://code.google.com/p/orika/source/browse/trunk/core/src/main/java/ma/glasnost/orika/metadata/TypeBuilder.java
> > >
> > >
> > > On Mon, Sep 23, 2013 at 5:53 PM, Gary Gregory <garydgregory@gmail.com
> >wrote:
> > >
> > >> I think might -1 unless a good argument is made to start duplicating
> Java
> > >> EE classes. Is it that hard to depend on
> > >>
> > >>
>
> http://search.maven.org/remotecontent?filepath=javax/enterprise/cdi-api/1.0-SP4/cdi-api-1.0-SP4.jar(or
> > >> a jar like it) for 50K?
> > >>
> > >> Gary
> > >>
> > >>
> > >>> On Mon, Sep 23, 2013 at 6:13 PM, <mbenson@apache.org> wrote:
> > >>>
> > >>> Author: mbenson
> > >>> Date: Mon Sep 23 22:13:57 2013
> > >>> New Revision: 1525711
> > >>>
> > >>> URL: http://svn.apache.org/r1525711
> > >>> Log:
> > >>> [LANG-919] Provide TypeLiteral class similar to
> > >>> javax.enterprise.util.TypeLiteral
> > >>>
> > >>> Added:
> > >>>
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> > >>>
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> > >>>  (with props)
> > >>>
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> > >>>
> > >>> Added:
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> > >>> URL:
> > >>>
> > >>
>
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java?rev=1525711&view=auto
> > >>>
> > >>>
> > >>
>
> ==============================================================================
> > >>> ---
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> > >>> (added)
> > >>> +++
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/TypeLiteral.java
> > >>> Mon Sep 23 22:13:57 2013
> > >>> @@ -0,0 +1,79 @@
> > >>> +/*
> > >>> + * Licensed to the Apache Software Foundation (ASF) under one or
> more
> > >>> + * contributor license agreements.  See the NOTICE file distributed
> with
> > >>> + * this work for additional information regarding copyright
> ownership.
> > >>> + * The ASF licenses this file to You under the Apache License,
> Version
> > >> 2.0
> > >>> + * (the "License"); you may not use this file except in compliance
> with
> > >>> + * the License.  You may obtain a copy of the License at
> > >>> + *
> > >>> + *      http://www.apache.org/licenses/LICENSE-2.0
> > >>> + *
> > >>> + * Unless required by applicable law or agreed to in writing,
> software
> > >>> + * distributed under the License is distributed on an "AS IS" BASIS,
> > >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > >>> implied.
> > >>> + * See the License for the specific language governing permissions
> and
> > >>> + * limitations under the License.
> > >>> + */
> > >>> +package org.apache.commons.lang3.reflect;
> > >>> +
> > >>> +import java.lang.reflect.Type;
> > >>> +import java.lang.reflect.TypeVariable;
> > >>> +
> > >>> +import org.apache.commons.lang3.Validate;
> > >>> +
> > >>> +/**
> > >>> + * Type literal comparable to {@code
> javax.enterprise.util.TypeLiteral},
> > >>> + * made generally available outside the JEE context. Allows the
> passing
> > >>> around of
> > >>> + * a "token" that represents a type in a typesafe manner, as opposed
> to
> > >>> + * passing the (non-parameterized) {@link Type} object itself.
> > >>> + * Additionally {@link TypeLiteral} implements the {@link Typed}
> > >>> interface which
> > >>> + * is a generalization of this concept. It is suggested that APIs
be
> > >>> defined in
> > >>> + * terms of the interface, which others might implemented in custom
> > >>> classes.
> > >>> + */
> > >>> +public abstract class TypeLiteral<T> implements Typed<T>
{
> > >>> +
> > >>> +    @SuppressWarnings("rawtypes")
> > >>> +    private static final TypeVariable<Class<TypeLiteral>>
T =
> > >>> TypeLiteral.class.getTypeParameters()[0];
> > >>> +
> > >>> +    /**
> > >>> +     * Represented type.
> > >>> +     */
> > >>> +    public final Type value;
> > >>> +
> > >>> +    private final String toString;
> > >>> +
> > >>> +    protected TypeLiteral() {
> > >>> +        this.value =
> > >>> +            Validate.notNull(TypeUtils.getTypeArguments(getClass(),
> > >>> TypeLiteral.class).get(T),
> > >>> +                "%s does not assign type parameter %s", getClass(),
> > >>> TypeUtils.toLongString(T));
> > >>> +
> > >>> +        this.toString = String.format("%s<%s>",
> > >>> TypeLiteral.class.getSimpleName(), TypeUtils.toString(value));
> > >>> +    }
> > >>> +
> > >>> +    @Override
> > >>> +    public final boolean equals(Object obj) {
> > >>> +        if (obj == this) {
> > >>> +            return true;
> > >>> +        }
> > >>> +        if (obj instanceof TypeLiteral == false) {
> > >>> +            return false;
> > >>> +        }
> > >>> +        final TypeLiteral<?> other = (TypeLiteral<?>)
obj;
> > >>> +        return TypeUtils.equals(value, other.value);
> > >>> +    }
> > >>> +
> > >>> +    @Override
> > >>> +    public int hashCode() {
> > >>> +        return 37 << 4 | value.hashCode();
> > >>> +    }
> > >>> +
> > >>> +    @Override
> > >>> +    public String toString() {
> > >>> +        return toString;
> > >>> +    }
> > >>> +
> > >>> +    @Override
> > >>> +    public Type getType() {
> > >>> +        return value;
> > >>> +    }
> > >>> +}
> > >>>
> > >>> Added:
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> > >>> URL:
> > >>>
> > >>
>
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java?rev=1525711&view=auto
> > >>>
> > >>>
> > >>
>
> ==============================================================================
> > >>> ---
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> > >>> (added)
> > >>> +++
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> > >>> Mon Sep 23 22:13:57 2013
> > >>> @@ -0,0 +1,32 @@
> > >>> +/*
> > >>> + * Licensed to the Apache Software Foundation (ASF) under one or
> more
> > >>> + * contributor license agreements.  See the NOTICE file distributed
> with
> > >>> + * this work for additional information regarding copyright
> ownership.
> > >>> + * The ASF licenses this file to You under the Apache License,
> Version
> > >> 2.0
> > >>> + * (the "License"); you may not use this file except in compliance
> with
> > >>> + * the License.  You may obtain a copy of the License at
> > >>> + *
> > >>> + *      http://www.apache.org/licenses/LICENSE-2.0
> > >>> + *
> > >>> + * Unless required by applicable law or agreed to in writing,
> software
> > >>> + * distributed under the License is distributed on an "AS IS" BASIS,
> > >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > >>> implied.
> > >>> + * See the License for the specific language governing permissions
> and
> > >>> + * limitations under the License.
> > >>> + */
> > >>> +package org.apache.commons.lang3.reflect;
> > >>> +
> > >>> +import java.lang.reflect.Type;
> > >>> +
> > >>> +/**
> > >>> + * Generalization of "has a type."
> > >>> + */
> > >>> +public interface Typed<T> {
> > >>> +
> > >>> +    /**
> > >>> +     * Get the {@link Type} represented by this entity.
> > >>> +     *
> > >>> +     * @return Type
> > >>> +     */
> > >>> +    Type getType();
> > >>> +}
> > >>>
> > >>> Propchange:
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/reflect/Typed.java
> > >>>
> > >>>
> > >>
>
> ------------------------------------------------------------------------------
> > >>>    svn:executable = *
> > >>>
> > >>> Added:
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> > >>> URL:
> > >>>
> > >>
>
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java?rev=1525711&view=auto
> > >>>
> > >>>
> > >>
>
> ==============================================================================
> > >>> ---
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> > >>> (added)
> > >>> +++
> > >>>
> > >>
>
> commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/reflect/TypeLiteralTest.java
> > >>> Mon Sep 23 22:13:57 2013
> > >>> @@ -0,0 +1,56 @@
> > >>> +/*
> > >>> + * Licensed to the Apache Software Foundation (ASF) under one or
> more
> > >>> + * contributor license agreements.  See the NOTICE file distributed
> with
> > >>> + * this work for additional information regarding copyright
> ownership.
> > >>> + * The ASF licenses this file to You under the Apache License,
> Version
> > >> 2.0
> > >>> + * (the "License"); you may not use this file except in compliance
> with
> > >>> + * the License.  You may obtain a copy of the License at
> > >>> + *
> > >>> + *      http://www.apache.org/licenses/LICENSE-2.0
> > >>> + *
> > >>> + * Unless required by applicable law or agreed to in writing,
> software
> > >>> + * distributed under the License is distributed on an "AS IS" BASIS,
> > >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > >>> implied.
> > >>> + * See the License for the specific language governing permissions
> and
> > >>> + * limitations under the License.
> > >>> + */
> > >>> +package org.apache.commons.lang3.reflect;
> > >>> +
> > >>> +import static org.junit.Assert.assertEquals;
> > >>> +import static org.junit.Assert.assertNotEquals;
> > >>> +import static org.junit.Assert.assertTrue;
> > >>> +
> > >>> +import java.util.List;
> > >>> +
> > >>> +import org.junit.Test;
> > >>> +
> > >>> +public class TypeLiteralTest {
> > >>> +
> > >>> +    @Test
> > >>> +    public void testBasic() {
> > >>> +        assertTrue(TypeUtils.equals(String.class, new
> > >>> TypeLiteral<String>() {}.value));
> > >>> +
>  assertTrue(TypeUtils.equals(TypeUtils.parameterize(List.class,
> > >>> String.class),
> > >>> +            new TypeLiteral<List<String>>() {}.value));
> > >>> +    }
> > >>> +
> > >>> +    @Test
> > >>> +    public void testTyped() {
> > >>> +        final Typed<String> stringType = new TypeLiteral<String>()
> {};
> > >>> +        assertTrue(TypeUtils.equals(String.class,
> > >> stringType.getType()));
> > >>> +        final Typed<List<String>> listOfStringType = new
> > >>> TypeLiteral<List<String>>() {};
> > >>> +
>  assertTrue(TypeUtils.equals(TypeUtils.parameterize(List.class,
> > >>> String.class), listOfStringType.getType()));
> > >>> +    }
> > >>> +
> > >>> +    @Test
> > >>> +    public void testEquals() {
> > >>> +        assertEquals(new TypeLiteral<String>() {}, new
> > >>> TypeLiteral<String>() {});
> > >>> +        assertEquals(new TypeLiteral<List<String>>() {},
new
> > >>> TypeLiteral<List<String>>() {});
> > >>> +        assertNotEquals(new TypeLiteral<String>() {}, new
> > >>> TypeLiteral<List<String>>() {});
> > >>> +    }
> > >>> +
> > >>> +    @SuppressWarnings("rawtypes")
> > >>> +    @Test(expected = NullPointerException.class)
> > >>> +    public void testRaw() {
> > >>> +        new TypeLiteral() {};
> > >>> +    }
> > >>> +}
> > >>>
> > >>>
> > >>>
> > >>
> > >>
> > >> --
> > >> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> > >> Java Persistence with Hibernate, Second Edition<
> > >> http://www.manning.com/bauer3/>
> > >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> > >> Spring Batch in Action <http://www.manning.com/templier/>
> > >> Blog: http://garygregory.wordpress.com
> > >> Home: http://garygregory.com/
> > >> Tweet! http://twitter.com/GaryGregory
> > >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> > For additional commands, e-mail: dev-help@commons.apache.org
> >
>



-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message