2013-04-21 3 views
1

Это мой Interfce BinaryHeterogenousHyperedge:Взаимодействие с несколькими типами?

public interface BinaryHeterogenousHyperedge 
    <M extends Vertex<L>, L,T extends Vertex<E>, E> 
extends Hyperedge 
{ 
    public <T> List<Vertex> search(T centroid ,List<M> allElemntsVertex); 
} 

поиска метода принимают два параметра:

  • центроида вершина типа T (например, Tag Vertex)
  • список VertX типа M ! = T (например, изображение Vertex)

и ret урну список вершин обоих типов T и M

TagsImagesHyperEdges реализует этот интерфейс:

public class TagImagesHyperedge 
    implements BinaryHeterogenousHyperedge 
        <ImageVertex,Map<String, Instance> ,TagVertex,String> 
{ 

@Override 
public <T> List<Vertex> search(T centroid, List<ImageVertex> allElemntsVertex) 
    { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

Почему тип T не выводится?

+0

Что вы подразумеваете под * Почему тип T не выведен? *? –

+0

в классе TagImagesHyperEdge Тип T должен быть заменен на TagVertex – nawara

+1

Да, это будет выведено, но у вас есть другой '' в 'search'. –

ответ

5

Вы затеняете T из определения интерфейса с помощью T в определении метода. Никогда не делайте этого. Они разные, несвязанные параметры типа, нет возможности для вывода из другого. Ваш метод подписи в основном очень запутанным способ сказать:

public List<Vertex> search(Object centroid, List<M> allElementsVertex); 

Эмпирическое правило для Java: она никогда имеет смысл использовать параметр типа метода уровня, если он используется только один раз в сигнатуре метода. Параметры типа уровня метода полезны для выражения ограничения между типами параметров или типом возврата.

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