Как расширить универсальный класс с добавленными ограничениями в Java? - PullRequest
0 голосов
/ 06 февраля 2012

Я хочу расширить свой класс BinaryTree, чтобы принимались только целочисленные параметры, и я могу повторно использовать код.

public class BinaryTree<T extends Comparable<T>>  
{/*code omitted for convenience*/}  
public class BinaryTreeInt<T extends Integer> extends BinaryTree<T>  
{/*code omitted for convenience*/}

При компиляции появляется следующая ошибка:

BinaryTreeInt.java:1: type parameter T is not within its bound
public class BinaryTreeInt<T extends Integer> extends BinaryTree<T>
                                                                 ^
1 error

Можеткто-нибудь подскажет, как написать код для такого наследования?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Целое число является окончательным, так что у вас есть

public class BinaryTreeInt extends BinaryTree<Integer>

Однако тип подразумевает, что это int, а не Integer

1 голос
/ 06 февраля 2012

Проблема связана со следующим потенциальным классом:

class FunnyNumber extends Integer { }

Этот класс не расширяется Comparable<T>, поэтому его нельзя использовать в качестве базы T.
Другими словами, extends Comparable<Integer> не совпадает с extends Comparable<T>.

Ваш второй класс вообще не должен быть общим.
Вам следует использовать дженерики, только если вы хотите изменить параметр типа.
Здесь вам нужен единственный фиксированный тип, поэтому вы должны создать обычный неуниверсальный класс, который расширяет BinaryTree<Integer>. (или просто используйте BinaryTree<Integer> напрямую и вообще не создавайте отдельный класс)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...