Ошибка времени компиляции для универсального типа

1

Обычно, в eclipse, я могу запустить свой код без какой-либо ошибки компиляции. Однако, с файлом ant, я столкнулся с error: type argument Map is not within bounds of type-variable Type. Что не так с моим файлом ant?

Код я принимаю ошибку;

[javac] class StratI implements Strat<Map> {
[javac]                                      ^
[javac]   where T is a type-variable:
[javac]     T extends Map<?,?> declared in interface Strat
[javac] 1 error

Ант-Джавак;

<target name="compile"  depends="init">
        <javac  compiler="javac1.7"
                destdir="${build.dir}/classes"
                source="1.7"
                target="1.7"
                includeantruntime="false"
                encoding="ISO-8859-1">

                <src    path="${src.dir}" />
                <classpath refid="classpath" />
        </javac>
</target>

Примечание. Я искал Google для этой ошибки. Я не вижу ни одного источника, который говорит правду и показывает, как его решить.

  • 0
    вы обычно не реализуете дженерик. stackoverflow.com/questions/976441/...
  • 0
    @Reimeus да, это в другой упаковке
Показать ещё 9 комментариев
Теги:
ant
javac

3 ответа

0

Очевидно, ваш класс Strat

class Strat implements Strat<Map>

Очевидно, что у вас не может быть класса, который реализует себя (так как это интерфейс, кажется, что вы столкнулись с именем). Кроме того, он не может быть общим, если он не объявлен как имеющий параметр.

Поскольку у вас есть общий интерфейс в другом пакете (за ваш комментарий, да, он находится в другом пакете), вы можете явно использовать полный пакет для интерфейса - например,

package com.example.interface;

// A generic Strat interface
interface Strat<T> {
}

Затем для его реализации (вероятно, вы должны выбрать более описательное имя - возможно, IStrat<T>) -

package com.example.impl;

class Strat implements com.example.interface.Strat<Map> {
}

или используя IStrat

class Strat implements IStrat<Map> {
}
  • 0
    нет, подпись strat является public interface Strat<T extends Map<?,?>>
  • 0
    К какой Strat вы обращаетесь? В вашем вопросе ясно сказано, что class Strat implements Strat<Map> , здесь Эллиот ссылается на это.
Показать ещё 1 комментарий
0

Карта является сырым типом и, как указано в ошибке, не находится в пределах ограничений типа Type который является T extends Map<?,?>. Хотя вы расширяете карту "взять все", она по-прежнему является спецификацией необработанного типа.

Вы должны изменить объявление StratI интерфейса StratI в:

class StratI implements Strat<Map<?,?>>

или поскольку вы расширяетесь

class StratI implements Strat<HashMap<?,?>>

или все же, поскольку это реализация

class StratI implements Strat<HashMap<Integer, String>>

РЕДАКТИРОВАТЬ

Тот факт, что Eclipse не показывает его как ошибку, заключается в том, что Eclipse не отображает ошибки компиляции для непараметризированных исходных типов. Вместо этого отображается предупреждение:

public interface myIn<T extends Map<?,?>>{
   void foo();
}

public class myClass implements myIn<Map>{
 @Override
 public void foo() {}

}

Eclipse будет подчеркивать предупреждение Map:

Map является сырым типом. Ссылки на общий тип Map<K,V> должна быть параметризована

0

То, как вы определили свой интерфейс, неверно. Прочтите java-документацию. Этот фрагмент кода поможет.

public interface Start<T> {
    public void display();
}

public class StartI implements Start<Map<String, String>> {

    @Override
    public void display() {
        System.out.println("Implement here");
    }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню