2015-01-14 4 views
0

У меня есть два класса:же универсальный типа в двух разных классах в Java

class A<K,V> { 
    B b = new B; 

    public V get(K k) { 
    return b.get(k); 
    } 
} 

class B<K,V> { 
    V v; 

    public V get(K k) { 
    return v; 
    } 
} 

я получаю несовместимые типы ошибок в методе GET класса А.

Означает ли это, типа V класса A не совпадает с типом V класса B? В этом случае, как я могу исправить эту проблему? Могу я просто привести его к V перед возвращением?

ответ

2

Parametrize B с V в A. Таким образом, компилятор может быть уверен, что ваш класс B вернет объект типа V.

class A<K,V> { 
    B<K,V> b = new B<K,V>; 

    public V get(K k) { 
    return b.get(k); 
    } 
} 
+0

Thank Neil. Сначала я увидел ответ Дэвида, и там был следующий вопрос. Не могли бы вы узнать ответ на этот вопрос? – jCoder

2

Изменение B b = new B; внутри класса A к B<K,V> b = new B<>();

Это гарантирует, что типы ссылаются K и V в определении B для переменной b совпадают с теми, в рамках определения A.

+0

Спасибо, Дэвид! Это помогло. Просто продолжение. Если вместо B b я создал массив B [] b, я бы не смог использовать B [] b. Есть ли способ исправить это? – jCoder

+0

Насколько я знаю, бетонные параметризованные типы не разрешены для массивов. Вы можете использовать необработанный тип B [] b или использовать коллекцию. – ramp

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