On Mon, Feb 9, 2009 at 9:27 AM, Reinier Zwitserloot <reini...@gmail.com> wrote:
>
> Given that he customized this to being called 'Par', omitting the
> toString, and having the awkward Serializable requirement, it seems
> like it would be considerably LESS work in the long run to do it right
> once. It also seems obvious, given those mistakes, that he may have to
> make updates, so copy/pasting the class into every new project is also
> a bad idea, as then he couldn't easily make updates to this class.
>

minor pains for such a small utility I'll say. Haven't need the
change, as flawed as it is. Didn't even look it a second time again
until I posted this. No work was ever required to maintain it.

> Here are some more problems with your pair class:
>
> 1. By using a constructor, you don't get type inference. Use a static
> method, like so:
>
> public static <P, Q> Pair<P, Q> create(P a, P b) {
>    return new Pair<P, Q>(a, b);
> }
>
> and then make the actual constructor private.
>
> 2. While you're at it, you can also fix your serializable issue, by
> making two constructors:
>
> public static <P extends Serializable, Q extends Serializable> Pair<P,
> Q> create(P a, P b) {
>    return new Pair<P, Q>(a, b);
> }
>
> public static <P, Q> Pair<P, Q> createNonSerializable(P a, P b) {
>    return new Pair<P, Q>(a, b);
> }
>

Understood and agreed.

>
> so, now by default things have to be serializable, but you can get
> around the issue if you want without having to bother with raw types
> and @SuppressWarnings("unchecked").
>
> (If you're really anal about it, you can create a Pair class and a
> SerializablePair subclass, and have the create() method return a
> SerializablePair, but I'd have to question your sanity).
>
> Also, your insistence on Serializable is itself a code smell; because,
> as Keith Haber suggested: If serializable 'seems like a good idea',
> then so does Comparable, and then why not Runnable (for if both pairs
> are Runnables and you want to run both of them, or some such). Where
> do you draw the line? Sure, serializable needs special treatment
> because its such a bad design, but that's actually a good reason to
> work around it as best you can.
>

You talk as if implementing serializable was a whim. It was not. Don't
take it so seriously ;)

> NB: Here's something I might submit to Project Coin: Make all entities
> serializable regardless of whether or not they implement Serializable,
> but run every attempt to serialize a non-serializable through the
> securitymanager.
>
> On Feb 9, 3:08 am, Weiqi Gao <weiqi...@gmail.com> wrote:
>> Reinier Zwitserloot wrote:
>>
>> > If you've been adding it to every project, why not make a jar out of
>> > it?
>>
>> Because that would be more work than writing the class.
>>
>> --
>> Weiqi Gao
>> weiqi...@gmail.comhttp://www.weiqigao.com/blog/
> >
>

Just for fun, I googled Pair.java. There are HUNDREDS of them. Even in
the official distribution, the compiler contains one:
http://www.google.com/codesearch/p?hl=en#zBm1I2MD8bU/src/share/classes/com/sun/tools/javac/util/Pair.java

-- 
Marcelo Morales

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to