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