On Fri, Oct 2, 2009 at 10:11 AM, Patrick LeBoutillier
<patrick.leboutill...@gmail.com> wrote:
> Choosing to always give objects the return types of the methods that
> returned them would break a lot of things,
> and would actually introduce more casting (i.e. anytime you would work with
> generic containers, like Vectors, you
> would always need to cast (just like in Java basically)). That in my opinion
> would remove some of the "magic"...

Yeah, I can see that side of the issue too. Most of the stuff I've had
to work around has been stuff surrounding interfaces for similar but
slightly different reasons. For instance, when dealing with EJB, you
have the same kind of problems. You look up a resource in jndi, you
get back a portable remote object (the primorial object type for ejb)
and have to narrow the cast based on an interface. When you get right
down to it, its corba roots show pretty clearly. So, I did what seemed
best. I encapsulated all that casting in a perl object facade for the
ejb and presented a more perlish interface to calling code. Keep java
looking like java, perl looking like perl and glue code as out of the
way as possible :)

The JDBC thing is kind of a different issue. For JDBC, there's a very
clear distinction. JDBC is all about interface, not implementation.
Initially I was thinking that it would be as simple as adding a little
extra meta info about classes. Using reflection, you can pretty easily
see what the return types of any given methods are. The issue, as you
correctly point out, is that when you're dealing with concrete
implementation classes, you can't really derive if a person is calling
them from the context of an interface, or in the context of a plain
old object reference. In some cases it would just result in a bunch of
wasteful casts.


> And because all overridden Java methods are virtual, meaning you can't
> really call the wrong method when it's overridden
> (unlike C++ I think), in reality this only seems to be a problem in these
> specific circumstances: non-public classes that implement public interfaces
> or extend public base classes.
>

Agreed. And there are other ways to work around the issue outside of
Inline::Java. What we're running into issues with are a vendors
implementation of the interfaces.

I'm happy to give it a shot. Send me a patch, git url, svn url, or a
tarball. I can test it out with mysql, oracle and probably a couple
other databases if I force myself to make the time.

I'm glad for the discussion, I'll see if I can come up with some
patches for JDBC.pm that'll let it be a little more strong handed
about forcing the interface casts.

--
J.

Reply via email to