2015-05-27 6 views
3

Я скачал код, который имеет функцию, которая начинается так:Расширение интерфейса

public class MDP<S, A extends Action> implements MarkovDecisionProcess<S, A> { 
//some code...blah blah blah... 
} 

S и A должны быть своего рода type. Action - interface.

В моем коде я хочу использовать данный класс MDP. Поэтому мне пришлось определить S и A; Я определил S как определенный класс, но я не знаю, как определить A ... это не класс и это не интерфейс. Что это должно быть?

Спасибо :)

типа
+0

Он должен быть класс, который реализует этот интерфейс либо прямо или косвенно, или который расширяет его. – RealSkeptic

+0

вам не нужно определять S, классы –

+0

@ThusithaThilinaDayaratne, используя необработанные типы, действительно обескуражен, хотя – Joffrey

ответ

3

«А» будет класс, который реализует интерфейс, который расширяет действие.

1

Для кода

public class MDP<S, A extends Action> implements MarkovDecisionProcess<S, A> { 
    //some code...blah blah blah... 
} 

S и A типы. Они могут ссылаться на интерфейс или класс. Буквенные обозначения произвольны. Они могут быть любой буквой. Это так же, как действует

public class MDP<Q, Z extends Action> implements MarkovDecisionProcess<Q, Z> { 
    //some code...blah blah blah... 
} 

Все это говорит, «класс MDP является параметризованным классом, имеющими параметры S и A где A является некоторым подклассом Action, и он реализует интерфейс MarkovDecisionProcess<S,A>. S и A может или не могут быть одного типа ».

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

Это может быть возможно иметь эти типы в декларации интерфейса. Тогда их можно было бы остановить на экземпляре.

public interface MarkovDecisionProcess<S,V extends Action>{} 

public class MDP implements MarkovDecisionProcess{} 

Возможно, вам будет полезно прочитать некоторые из official documentation.

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