小编典典

javac错误:具有泛型的不可转换类型?

java

还有其他一些SO问题在讨论可以使用Eclipse的编译器而不是javac进行泛型编译的问题(即Java:泛型在Eclipse和javac中处理不同,泛型可以在Eclipse中编译和运行,但不能在javac中编译)-但这看起来就像一个稍微不同的人。

我有一enum堂课:

public class LogEvent {
   public enum Type {
       // ... values here ...
   }
   ...
}

我还有一个带有方法的类,该方法接受来自Enum以下类型的任意对象:

@Override public <E extends Enum<E>> void postEvent(
    Context context, E code, Object additionalData) 
{
    if (code instanceof LogEvent.Type)
    {
        LogEvent.Type scode = (LogEvent.Type)code;
    ...

这在Eclipse中可以正常工作,但是当我使用进行了干净的构建时ant,我遇到了一对错误,一个错误instanceof在线,另一个错误在强制转换线:

443: inconvertible types
    [javac] found   : E
    [javac] required: mypackage.LogEvent.Type
    [javac]         if (code instanceof LogEvent.Type)
    [javac]             ^

445: inconvertible types
    [javac] found   : E
    [javac] required: com.dekaresearch.tools.espdf.LogEvent.Type
    [javac]             LogEvent.Type scode = (LogEvent.Type)code;
    [javac]                                                  ^

为什么会发生这种情况,如何解决这个问题以便正确编译呢?


阅读 133

收藏
2020-11-13

共1个答案

小编典典

我不知道为什么会这样,但是解决方法很简单:

@Override public <E extends Enum<E>> void postEvent(
    Context context, E code, Object additionalData) 
{
    Object tmp = code;
    if (tmp instanceof LogEvent.Type)
    {
        LogEvent.Type scode = (LogEvent.Type)tmp;
    ...

很难看,但是可以用…

2020-11-13