Я пытаюсь позвонить:компилятор говорит метод не определен ... но (я думал)
public class Counter<MyClassSelectorObject> {
final HashMap<MyClassSelectorObject, Integer> counts = new HashMap<>();
public void add(MyClassSelectorObject t) {
counts.merge(t, 1, Integer::sum);
t.setCount(counts.get(t));
}
...
}
Однако я получаю следующее сообщение об ошибке от моего компилятора в Eclipse, на t.setCount(counts.get(t));
:
The method setCount(Integer) is undefined for the type MyClassSelectorObject
Однако у меня есть
public class MyClassSelectorObject implements Comparable<MyClassSelectorObject>{
...
public void setCount(Integer value) {
this.count = value;
}
...
}
решение, которое QuickFix функция для Eclipse предлагает меня бросить т к Объект, который не имеет для меня никакого смысла. Опять же, я просто возвращаюсь к кодированию через несколько лет, поэтому мне может не хватать чего-то основного здесь.
Я использую Java 8 и Eclipse Luna.
Спасибо!
Удаление обобщения из объявления класса Counter, похоже, решает проблему, но я все еще не уверен, почему (или это правильное решение). –
'MyClassSelectorObject' в' class Counter '- это имя общего типа, а не имя вашего класса. Это то же самое, что вы бы использовали 'T' в' class Counter '. Это означает, что в 'add (MyClassSelectorObject t)' MyClassSelectorObject' также является общим типом, поэтому вызов 't.setCount' невозможен, так как' t' является экземпляром некоторого неизвестного типа. –
Pshemo
@ Ваш комментарий был частью головоломки, которая заставила меня понять ответы ниже. Спасибо за вашу помощь! –