Для кода
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.
Он должен быть класс, который реализует этот интерфейс либо прямо или косвенно, или который расширяет его. – RealSkeptic
вам не нужно определять S, классы –
@ThusithaThilinaDayaratne, используя необработанные типы, действительно обескуражен, хотя – Joffrey