2010-04-06 51 views
4

我的同事和我最近几次遇到此警告消息。对于下面的代码:Eclipse警告:“<methodName>具有非API返回类型<参数化类型>”

package com.mycompany.product.data; 

import com.mycompany.product.dao.GenericDAO; 

public abstract class EntityBean { 
    public abstract GenericDAO<Object, Long> getDAO(); 
    //          ^^^^^^  <-- WARNING OCCURS HERE 
} 

警告出现在上市现场为

EntityBean.getDAO() has non-API return type GenericDAO<T, ID> 

一个谷歌搜索“具有非API返回类型”只显示其中出现的问题列出了此消息实例。也就是说,没有公开的解释。

这是什么意思?我们可以在Eclipse中创建一个使用问题过滤器,以使消息消失,但如果我们的用法是合法问题,我们不希望这样做。

谢谢!

编辑:此警告没有与参数做,因为这个声明的getFactory()也导致了同样的警告:

public abstract class EntityBean { 
    protected DAOFactory getFactory() { 
     return DAOFactory.instance(DAOFactory.HIBERNATE); 
    } 
} 
+0

我得到的错误(我是同事)有点不同:“Foo实现非API接口栏”。错误突出显示Foo,并且Foo被定义为“public class Foo implements Bar” – mwalling 2010-04-06 17:58:45

+0

T指定了哪里,以及GenericDAO如何定义?错误消息中的规范与方法签名不匹配。 – 2010-04-06 18:26:27

+0

@Steve:看起来这与参数化无关,因为返回非参数化类型的方法也会得到警告。 – Tenner 2010-04-06 18:36:00

回答

4

想通了。

这些类别(GenericDAODAOFactory作为返回类型)和EntityBean处于不同的包中。其中一个软件包(包含EntityBean的软件包)已列入清单文件的Export-Package:部分,而其他软件包(DAO)未列出。最终结果是DAO类不是API,而是由API类型返回的。

感谢所有人,尤其是JRL让我朝着正确的方向前进。

相关问题