2009-11-06 4 views
3

У меня есть следующий класс:Аннотация Общий класс

public abstract class Step { 
    public abstract <S,T> S makeAStep(S currentResult, T element); 
} 

, и я пытаюсь выполнить его так, это займет два ИНТ и возвратить сумму из них, что-то вроде этого:

public class sumOfInts extends Step { 
    public <Integer,Integer> Integer makeAStep(Integer currentResult, Integer element){ 
     return currentResult + element; 
    } 
} 

но я получаю следующее сообщение об ошибке:

в sumOfInts типа должен реализовать унаследованный абстрактный метод Step.makeAStep (S, T)

пожалуйста, помогите мне (мне это нужно для моих языков программирования конечно домашнего задания)

задает очень любезно, чтобы написать мне код, который делает то, что я хочу сделать, который обыкновение иметь любые ошибки или предупреждения спасибо спереди

+0

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

ответ

11
public abstract class Step<S,T> { 
    public abstract S makeAStep(S currentResult, T element); 
} 

public class SumOfInts extends Step<Integer,Integer> { 
    // etc. 
+1

Кроме того, сам класс Step должен был иметь генерики, зарегистрированные на уровне класса, чтобы это предложение работало, а не на уровне метода –

+0

@Jason +1 Я согласен! Я думаю, что ваш комментарий соответствует ответу, который я только что написал. – KLE

2

Я согласен с ответом Джонатана.


Существует и другая возможность, приведенная ниже, что сохраняет параметры типа на самом методе.

Это только теория в этом случае, потому что имена классов и методов предполагают, что это не имеет значения для этого примера.
Так я меняю имена для моего примера:

public abstract class Step { 
     public abstract <S,T> String makeAStep(S first, T second); 
    } 

    public class ConcatTwo extends Step { 
     public <S, T> String makeAStep(S first, T second){ 
     return String.valueOf(first) + String.valueOf(second); 
     } 
    } 

Примечание: Это работает, потому что операция использует String.valueOf(Object), который работает для любого типа (все подкласс Object). Для другой операции нам пришлось бы ограничивать S и T, используя что-то вроде
S extend Integer например.

Смежные вопросы