PRE-PROPOSAL: Simple operator overloading.

Vilya Harvey vilya.harvey at gmail.com
Thu Mar 26 02:00:13 PDT 2009


You're right, I hadn't considered widening conversions. You really  
want multiple dispatch in order to solve this elegantly, but somehow I  
don't see that being added to java anytime soon. :-) So I guess that  
leaves two options (for the interface-based approach): you could throw  
ClassCastException, forcing the user to do the conversion themselves;  
or you could do something like this with generics:

interface Addable<R, T> {
     R add(T val);
}

class BigInteger implements
     Addable<BigInteger, BigInteger>,
     Addable<BigDecimal, BigDecimal>
{ ... }

class BigDecimal implements
     Addable<BigDecimal, BigInteger>,
     Addable<BigDecimal, BigDecimal>
{ ... }

I admit that doesn't look too elegant anymore, but I think it  
addresses the issue. Do you see any other problems there that I've  
overlooked?

Cheers,
Vil.

Sent from my iPod

On 26 Mar 2009, at 01:08, Daniel Cheng <j16sdiz at gmail.com> wrote:

> On Wed, Mar 25, 2009 at 8:03 PM, Vilya Harvey  
> <vilya.harvey at gmail.com> wrote:
>> I would love to see this, but I'd prefer it to be based on special
>> interfaces rather than annotations. This would adhere to the
>> principle, mentioned on this list a few times, that annotations
>> shouldn't modify the results of the compiler.
>>
>> For example, if you implement the Addable (say) interface then your
>> class can be used the '+' operator; or the Subtractable interface for
>
> We can't specify the return type if we use an interface.
>
> We may want to do something like this:
>
>        BigInteger + BigInteger     = BigInteger
>        BigInteger + BigDecimal   = BigDecimal
>        BigDecimal + BigInteger   = BigDecimal
>        BigDecimal + BigDecimal = BigDecimal
>
> There is no way to implement this using interface.
>
>> the '-' operator. I'd imagine you would also want some grouping
>> interfaces, to reduce the number of interface declarations required
>> when overloading multiple operators (e.g. interface Artihmetic  
>> extends
>> Addable, Subtractable etc.).
>>
>> Whatever form it takes though, it would be great to have this
>> capability in Java!
>>
>> Vil.
>>
>>
>> 2009/3/25  <rssh at gradsoft.com.ua>:
>>> Permanent URL: http://docs.google.com/Doc?id=dhhvggr8_18djp85shk
>>>
>>> Probably too big, but anyway.
>>>
>>> As I remember, alternative proposal (made [] and []= syntax sugar on
>>> well-known interfaces, as with for-each loop) still not submitted.  
>>> If
>>> anybody want submit such proposal, then it is possible to reuse
>>> JLS-changed for 15.26.1 from there.
>>>
>>>
>>
>>



More information about the coin-dev mailing list