Предупреждение Eclipse: ‹methodName› имеет возвращаемый тип не API ‹parameterizedType›

Недавно мы с коллегой пару раз сталкивались с этим предупреждающим сообщением. Для приведенного ниже кода:

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>

Поиск в Google по запросу «имеет тип возврата, отличный от API» показывает только те случаи, когда это сообщение появляется в списках проблем. То есть публичного объяснения этому нет.

Что это значит? Мы можем создать фильтр проблем с использованием в Eclipse, чтобы сообщение исчезло, но мы не хотим этого делать, если наше использование является законной проблемой.

Спасибо!

EDIT: это предупреждение не связано с параметризацией, так как это объявление getFactory() также приводит к такому же предупреждению:

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

person James Cronen    schedule 06.04.2010    source источник
comment
Ошибка, которую я получаю (я коллега), немного отличается: Foo реализует интерфейс Bar без API. Ошибка выделяет Foo, а Foo определяется как общедоступный класс Foo, реализующий Bar   -  person mwalling    schedule 06.04.2010
comment
Где указывается T и как определяется GenericDAO? Спецификация в сообщении об ошибке не соответствует сигнатуре метода.   -  person Steve B.    schedule 06.04.2010
comment
@Steve: похоже, что это не связано с параметризацией, поскольку методы, возвращающие непараметризованные типы, также получают предупреждение.   -  person James Cronen    schedule 06.04.2010


Ответы (2)


Догадаться.

Эти классы (GenericDAO и DAOFactory как возвращаемые типы) и EntityBean находились в разных пакетах. Один из пакетов (тот, что содержит EntityBean) был указан в разделе Export-Package: файла манифеста, а другой пакет (DAOs) — нет. Чистый эффект заключается в том, что классы DAO не относятся к API и возвращаются типом API.

Спасибо всем, особенно JRL за то, что направил меня в правильном направлении.

person James Cronen    schedule 06.04.2010

Вы просмотрели следующие документы Eclipse: правила взаимодействия с API и Настройки ошибок и предупреждений API ?

person JRL    schedule 06.04.2010
comment
У меня нет, но я буду. Спасибо. - person James Cronen; 06.04.2010