Instanciando Genrerics

5 respostas
K

Bom dia caros amigos do GUJ, não conseguí inicializar a classe abaixo, alguém poderia me ajudar?

public class SimpleGraph<V, E>
    extends AbstractBaseGraph<V, E>
    implements UndirectedGraph<V, E>
{
    //~ Static fields/initializers ---------------------------------------------

    private static final long serialVersionUID = 3545796589454112304L;

    //~ Constructors -----------------------------------------------------------

    /**
     * Creates a new simple graph with the specified edge factory.
     *
     * @param ef the edge factory of the new graph.
     */
    public SimpleGraph(EdgeFactory<V, E> ef)
    {
        super(ef, false, false);
    }

    /**
     * Creates a new simple graph.
     *
     * @param edgeClass class on which to base factory for edges
     */
    public SimpleGraph(Class<? extends E> edgeClass)
    {
        this(new ClassBasedEdgeFactory<V, E>(edgeClass));
    }
}

Tentei o seguinte:

UndirectedGraph<Object, DefaultEdge> objectGraph =  new SimpleGraph<Object, DefaultEdge>(new Object(),new DefaultEdge());

A ide diz: The constructor SimpleGraph<Object,DefaultEdge>(Object, DefaultEdge) is undefined…

Obrigado pela atenção…

5 Respostas

ViniGodoy

Será que o problema não é pelo fato de Object ser abstrato e não poder ter o construtor chamado?
Isso aqui:

new Object()

Não é um código válido.

ViniGodoy

Esqueça o que eu disse. Object não é uma classe abstrata e o código em questão, apesar de não fazer muito sentido, é válido.

ViniGodoy

O erro é bastante claro. Sua classe SimpleGraph não tem um construtor que aceite um Object e um DefaultEdge. E não tem mesmo.

Note que você não tem o construtor:

public SimpleGraph(V v, E e)

Você só tem como opções:
a) Criar um EdgeFactory<Object, DefaultEdge> e atender ao construtor:

public SimpleGraph(EdgeFactory&lt;V, E&gt; ef)

b) Criar um Class<DefaultEdge> (ou de qualquer filho de DefaultEdge) e atender ao construtor:

public SimpleGraph(Class&lt;? extends E&gt; edgeClass)

Ou então, crie um construtor com a assinatura desejada.

K

Pro meu caso a opção b é a mais viável … Vou seguí-la… obrigado pela atenção…

K

Dei uma pesquisada na suite de testes dos criadores da Biblioteca de Grafos onde existe o código que postei e conseguí resolver assim:

UndirectedGraph<Object, DefaultEdge> objectGraph =
	            new SimpleGraph<Object, DefaultEdge>(DefaultEdge.class);

Esse código

Class<? extends E> edgeClass

pede para informar o .class da classe de arestas(edgeClass)… no meu caso usei a classe default da biblioteca…

Criado 23 de agosto de 2011
Ultima resposta 23 de ago. de 2011
Respostas 5
Participantes 2