Это ошибка eclipse или maven-compiler-plugin, проблема приведения класса к дженерикам? - PullRequest
3 голосов
/ 12 апреля 2011

У меня есть такой код:

protected <T> T doSomething(String someParam, Class<T> clazz) {
...
}

, который я использую в классе TestCase:

Class clazz = MyClass.class;
MyClass MyClass = someObject.doSomething(someString, clazz);

Этот код выдает предупреждение при затмении :

Класс является необработанным типом. Ссылки на универсальный тип Class должны быть параметризованы

и

Несколько маркеров в этой строке
- Безопасность типов: непроверенный вызов doSomething (String, Class) универсального метода doSomething (String, Class) типа MyClass
- Безопасность типов: для выражения типа Class требуется непроверенное преобразование для соответствия Class

Когда я запускаю этот код (тест) в Eclipse - все работает отлично. Когда я делаю это через «mvn clean install» через командную строку , я получаю:

C: \ pathToProject \ src \ test \ java \ packagesPath \ MyTestCase.java: [xx, xxx] найдено несовместимых типов:
java.lang.Object
обязательно: com.somePackagePath.MyClass

Но при предоставлении:

Class<MyClass> clazz = MyClass.class;
MyClass MyClass = someObject.doSomething(someString, clazz);

Я не получаю ни ошибок, ни предупреждений. .
Я понимаю, что компилятор Java стирает информацию о типе , поэтому:
Не должно ли eclipse выдавать ошибку компилятора вместо предупреждения, или это maven-plugin-compiler, который создает проблему?
Плагин Maven это:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <showDeprecation>false</showDeprecation>
                <debug>true</debug>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

С уважением,
Деспот

Ответы [ 3 ]

3 голосов
/ 12 апреля 2011

Это известная ошибка в Eclipse: 333011: [compiler] [1.5] Eclipse компилирует коды, которые отклоняет javac: несовместимые типы .Не стесняйтесь голосовать за ошибку и добавить к ней свой вариант использования.


Бывают ситуации, когда javac и Eclipse не согласны, и вы должны сообщать о них как об ошибках.Желательно, чтобы в автономном тестовом примере было как можно меньше файлов Java, которые можно копировать / вставлять в Eclipse и компилировать с помощью javac из командной строки без каких-либо зависимостей.

0 голосов
/ 03 августа 2017

Обходной путь - использование компилятора eclipse в maven, как описано в Использование компилятора Eclipse Java (ecj) в сборках maven

0 голосов
/ 14 мая 2011

Какой компилятор вы используете? В этом случае http://code.google.com/p/jclouds/issues/detail?id=461 кажется, что openjdk обнаруживает несовместимые типы, в то время как sun jdk игнорирует его и компилирует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...