2011-10-28 18 views
0

で問題をコンパイルし、私はこのようなオーバーロードされたメソッドがあります。Java型消去は、Javaクラスの蟻

method1(List<Details1HO> input){}; 

method1(List<Details2HO> input){}; Details2HODetails1HO両方とも同じクラスDetailsHOを拡張します。 RADが細かいクラスを作成しますが、アリはエラーを与える:実際のエラー:メソッドが別の戻り値の型に
EDIT#2を持っている:

name clash: method1(java.util.List<Details1HO>) and method2(java.util.List<Details1HO>) have the same erasure 

Javaバージョンはアリにし、RAD
EDITの両方で1.5です

name clash: mapToDO(java.util.List<com.bmo.ctp.alerts.businessobjects.user.hibernate.DeliveryDomainRestrictionHO>) and mapToDO(java.util.List<com.bmo.ctp.alerts.businessobjects.subscription.hibernate.SubscriptionDetailsHO>) have the same erasure 

レアル宣言:

public static DeliveryDomainRestrictionDO[] mapToDO(List<DeliveryDomainRestrictionHO> deliveryDomainRestrictions){} 

public static List<SubscriptionSummaryDO> mapToDO(List<SubscriptionDetailsHO> input) {} 
+1

「ant」は気にしないでください。「javac」とは何ですか?あなたの宣言はエラーメッセージと矛盾していますが、実際のコードは何ですか? –

+0

@Kilian:antは単なるビルドツールです。コンパイラではありません。これはjavacを使用します。 –

+0

_real_宣言と_real_エラーメッセージを見たいと思っていますか?キリアンの言うとおり、質問には矛盾があり、実際に何が起こっているのかを知ることは不可能です。ありがとう。 –

答えて

1

私はRADがこれを構築することに驚いています。それはすべきではない。

class Foo { 
    public void foo(List<A> as); 
    public void foo(List<B> bs); 
} 

type erasureに起因する、ので、彼らは両方の実行時に正確に同じシグネチャを持っている:それはのように見えるクラスを持つことが法的ではありません

class Foo { 
    public void foo(List); 
    public void foo(List); 
} 

あなたはこの種の問題を持って、それ通常は、実際に必要なものよりも複雑なものを実行しようとしていることを意味します:)いずれにしても、これらを明確にする必要があります。

+0

Ok ..さらなる調査をして、このメソッドの名前を安全に変更することにしました。ありがとうございました – Victor

5

Javaはoverloadiことはできません。異なる汎用パラメータのみを使用してください。ランタイムの観点からは、どちらもパラメータとしてリストを取るメソッドです。

+0

RADではどのようにコンパイルされますか? – Victor

+1

@Kaushikもしそうなら、RADはJava言語仕様に違反しています。 –

0

私は、これに対する唯一の解決策は、メソッドのシグネチャを変更することだと思います。現在、両方のメソッドのシグネチャは同じです(ATランタイムは同じです)。

関連する問題