ant中的Java类型擦除编译问题

ant中的Java类型擦除编译问题,java,ant,Java,Ant,在java类中,我有一个重载方法,如下所示: method1(List<Details1HO> input){}; Java版本在ant和RAD中都是1.5 编辑:这些方法有不同的返回类型 编辑#2:实际错误: name clash: mapToDO(java.util.List<com.bmo.ctp.alerts.businessobjects.user.hibernate.DeliveryDomainRestrictionHO>) and mapToDO(java

在java类中,我有一个重载方法,如下所示:

method1(List<Details1HO> input){};
Java版本在ant和RAD中都是1.5
编辑:这些方法有不同的返回类型
编辑#2:实际错误:

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
名称冲突:mapToDO(java.util.List)和mapToDO(java.util.List)具有相同的擦除
真实声明:

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

public static List<SubscriptionSummaryDO> mapToDO(List<SubscriptionDetailsHO> input) {}
publicstaticdeliverydomainrestrictiondo[]mapToDO(List deliveryDomainRestrictions){}
公共静态列表mapToDO(列表输入){}

Java不允许只使用不同的泛型参数进行重载。从运行时的角度来看,这两种方法都只是将列表作为参数的方法。

Java不允许只使用不同的泛型参数进行重载。从运行时的角度来看,这两种方法都只是将列表作为参数的方法。

我认为唯一的解决方案是更改方法签名。目前,两个方法的签名是相同的(即在运行时)。

我认为唯一的解决方案是更改方法签名。目前,您的两个方法的签名是相同的(即在运行时)。

我很惊讶RAD会构建这个;不应该。拥有一个看起来像这样的类是不合法的:

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

当你遇到这类问题时,通常意味着你正在尝试做一些比实际需要更复杂的事情:)无论如何,你需要以某种方式消除这些歧义。

我很惊讶RAD会构建这个;不应该。拥有一个看起来像这样的类是不合法的:

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

当你遇到这类问题时,通常意味着你正在尝试做一些比实际需要更复杂的事情:)无论如何,你需要以某种方式消除这些歧义。

它怎么能在RAD上编译得很好?@Kaushik如果它能,RAD违反了Java语言规范。为什么它在RAD上编译得很好?@Kaushik如果它这样做了,RAD就违反了Java语言规范。不要管
ant
,javac说了什么?您的声明与错误消息不一致,实际代码是什么?@Kilian:ant只是一个构建工具。不是编译器。它使用javac。希望看到真正的声明和真正的错误消息吗?正如基利安所说,问题的内容不一致,因此不可能知道到底发生了什么。谢谢。
ant
,javac怎么说?您的声明与错误消息不一致,实际代码是什么?@Kilian:ant只是一个构建工具。不是编译器。它使用javac。希望看到真正的声明和真正的错误消息吗?正如基利安所说,问题的内容不一致,因此不可能知道到底发生了什么。谢谢。好的。在没有进一步调查的情况下,我们决定将该方法重命名为安全的。谢谢好的。在没有进一步调查的情况下,我们决定将该方法重命名为安全的。非常感谢。
class Foo {
  public void foo(List);
  public void foo(List);
}