Generics

18 respostas
anderson.bonavides

Galéra alguêm poderia me dar uma explicação detalhada dessa questão? Desculpem mas não entendi praticamente nada.

A resposta corréta é a letra F.
:cry:

Quais declarações de poderiam ser inseridas no comentário INSIRA A DECLARAÇÃO AQUI de forma que o progrma compile e rode?

import java.util.*;


public class LongWordFinder {

	public static void main(String[] args) {
		String[] array = {"123", "12345678", "1", "12", "[telefone removido]"};
		List <String> list = Arrays.asList(array);
		Collection<String> resultList = getLongWords(list);
	}
	//INSIRA A DECLARAÇÃO DE MÉTODO AQUI.
	{
		Collection<E> longWords = new ArrayList<E>();
		for(E word: coll)
			if(word.length() > 6) longWords.add(word);
		return longWords;
	}	
}

A) public static Collection
getLongWords(Collection coll)

B) public static List
getLongWords(Collection coll)

C) public static Collection
getLongWords(Collection coll)

D) public static List
getLongWords(Collection coll)
E) public static List
getLongWords(Collection coll)

F) static public Collection
getLongWords(Collection coll)

G) static public Collection
getLongWords(Collection coll)

18 Respostas

rdomartins

A única alternativa que atende ao problema é a F, porque o método:

  1. Retorna uma Collection de um tipo E genérico que implementa a interface CharSequence. No caso, E é do tipo String;

  2. Recebe uma Collection de um tipo E genérico que implementa a interface CharSequence; No caso, E é do tipo String e a Collection é uma List;

  3. É estático; necessário pois é chamado a partir de um método estático ( main ).

Espero ter ajudado.

anderson.bonavides

rdomartins:
A única alternativa que atende ao problema é a F, porque o método:

  1. Retorna uma Collection de um tipo E genérico que implementa a interface CharSequence. No caso, E é do tipo String;

  2. Recebe uma Collection de um tipo E genérico que implementa a interface CharSequence; No caso, E é do tipo String e a Collection é uma List;

  3. É estático; necessário pois é chamado a partir de um método estático ( main ).

Espero ter ajudado.

Sinceramente não to conseguindo compreender muito n. Eu não consigo enchergar pq ta certo ou pq ta errado.
Compreende?

rdomartins

Você não entendeu um ponto em específico? Algo relacionado à sintaxe da assinatura do método genérico ou ao ponto onde ele é inserido no código?

anderson.bonavides

Axo que a assinatura do método.

rdomartins

Dá uma lida nesses tutoriais:

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

Qualquer dúvida é só falar.

anderson.bonavides

Inglês.
:cry:

rdomartins

A maior parte da informação, pelo menos as mais confiáveis e completas, está em inglês.

Posso perquisar alguma documentação em português sobre generics, mas sugiro que você aproveite para treinar o inglês, pois hoje conhecer uma segunda língua não é mais diferencial: tornou-se algo que espera-se seja inerente a todo profissional.

É um conselho.

LPJava

bom vamos la… olha como analise essa questao:

A) public static Collection<? extends CharSequence>
getLongWords(Collection coll)

  • Invalido pq ? nao é um modificador válido para generics

B) public static List
getLongWords(Collection coll)

o tipo de retorno é invalido é uma List e observe que o metodo retorna Collection. que é pai de List.

D) public static List
getLongWords(Collection coll)

Olha o tipo de retorno do metodo novamente invalido. A letra E é o tipo de retorno do metodo novamente.
Agora as C,G eu nao conseguir acha o pq… mais nao marcaria eles…

Bom acho que isso mais… meio confusa essa questao nao tem coisa desse tipo la nao ta mais leve hehe em relacao a generics… o q tem muito é a mistura do 1.4 com 1.5…

Raff
anderson.bonavides:
Galéra alguêm poderia me dar uma explicação detalhada dessa questão? Desculpem mas não entendi praticamente nada.

A resposta corréta é a letra F.
:cry:

Quais declarações de poderiam ser inseridas no comentário INSIRA A DECLARAÇÃO AQUI de forma que o progrma compile e rode?

import java.util.*;


public class LongWordFinder {

	public static void main(String[] args) {
		String[] array = {"123", "12345678", "1", "12", "[telefone removido]"};
		List <String> list = Arrays.asList(array);
		Collection<String> resultList = getLongWords(list);
	}
	//INSIRA A DECLARAÇÃO DE MÉTODO AQUI.
	{
		Collection<E> longWords = new ArrayList<E>();
		for(E word: coll)
			if(word.length() > 6) longWords.add(word);
		return longWords;
	}	
}

A) public static Collection
getLongWords(Collection coll)

B) public static List
getLongWords(Collection coll)

C) public static Collection
getLongWords(Collection coll)

D) public static List
getLongWords(Collection coll)
E) public static List
getLongWords(Collection coll)

F) static public Collection
getLongWords(Collection coll)

G) static public Collection
getLongWords(Collection coll)

vamos lá

a) está tudo ok! Com exceção do tipo de retorno que é muito "extenso..." note que voce espera
Collection<String> e não Collection<? extends CharSequence >
se fosse
Collection<? extends CharSequence> resultList = getLongWords(list)
estario tudo OK !!!! b) está não vai compilar porque dentro do metodo getLongWords() faz
Collection<E> longWord = new ArrayList<E>();
e retorna isso sendo que o teste é - um falha (Collection é uma List ?(falha...)) c) é uma sintaxe incorreta o metodo aqui não está sendo uma método genérico correto!! ele é assim
public static Collection<E extends CharSequence>  getLongWords(Collection<E> c){...}
note que para um metodo ser generico precisa declarar que o mesmo é generico, e esse metodo não faz isso ! d) esse de cara já da para matar que está errado pois isso é a parte mais simples de generico.. vamos lá um exemplo..
List<Integer> inter;
List<String> stringg;
inter = stringg; // isso é correto ?// esse é um dos motivos desse metodo não poder ser o correto.

e) a sintaxe do metodo está certinha mas o que está errado é o tipo de retorno do metodo.

f) é o certo.

g) está errado a sintaxe não se pode usar
public static <E super CharSequence> .......
somento a palavra extends....

valow espero ter ajudado !

Raff

qualquer duvida só gritar!

T
import java.util.*;


public class LongWordFinder {

	public static void main(String[] args) {
		String[] array = {"123", "12345678", "1", "12", "[telefone removido]"};
		List &lt;String&gt; list = Arrays.asList(array);
		Collection&lt;String&gt; resultList = getLongWords(list);
	}
// A) não vale porque getLongWords retorna uma Collection&lt;? extends CharSequence&gt; que
// nem sempre é um Collection&lt;String&gt;. (Embora uma Collection&lt;String&gt; seja uma Collection&lt;? extends CharSequence&gt;,
// o contrário não é verdade.
// B) não compila porque o tipo de retorno é List&lt;E&gt;, mas estamos tentando retornar uma Collection&lt;E&gt;.
// (Embora uma List&lt;E&gt; seja uma Collection&lt;E&gt;, o contrário não é verdade.
// C) não compila porque, para um método estático, é necessário especificar o tipo &lt;E&gt; antes
// da declaração do tipo de retorno. Neste caso, deveria ser: &lt;E extends CharSequence&gt;. Ou seja:
//	public static &lt;E extends CharSequence&gt; Collection&lt;E&gt; getLongWords(Collection&lt;E&gt; coll) 
// D) não compila porque E não está especificada em lugar nenhum
// E) não compila porque E não está especificada em lugar nenhum
// F) compila OK
// G) Podemos usar &lt;E extends CharSequence&gt;, mas não &lt;E super CharSequence&gt;; no máximo, 
// &lt;? super CharSequence&gt;. 

    static public &lt;E extends CharSequence&gt; Collection&lt;E&gt; getLongWords(Collection&lt;E&gt; coll) 
	{
		Collection&lt;E&gt; longWords = new ArrayList&lt;E&gt;();
		for(E word: coll)
			if(word.length() &gt; 6) longWords.add(word);
		return longWords;
	}	
}
Raff

thingol o E compila sim cara o que está errado é o tipo de retorno !!

T

Testei uma por uma; a E não compila mesmo, porque o parâmetro E não está especificado no cabeçalho do método.

Raff

aqui compilar se eu mudar para isso eu não preciso expecificar nada… note

public static void main(String... rafa){
String[] array = {"123", "12345678", "1", "12", "[telefone removido]"};   
        List &lt;String&gt; list = Arrays.asList(array);   
        Collection&lt;? extends CharSequence&gt; resultList = getLongWords(list);   // so mudar o tipo aqui....

}


public static List&lt;? extends CharSequence&gt; 
	getLongWords(Collection&lt;? extends CharSequence&gt; coll) {
		return new ArrayList&lt;CharSequence&gt;();
	}
anderson.bonavides

Ralf, thingol, LpJava e rdomartins. Muito obrigado vocês pela força. Essa galéra do Guj é muito gente fina. Apesar de já ter feito a prova acho q não cai nenhuma questão grande assim ou cai?
rs vlw a todos!

T

Cai não. Eles não perguntam tal tipo de coisas compridas.

anderson.bonavides

hahauhauhauh

Complicado uma questão dessas. O kra passa 5 minutos só matutando o código para responder.
:roll:

Raff

muito chato mesmo !

Criado 9 de janeiro de 2008
Ultima resposta 10 de jan. de 2008
Respostas 18
Participantes 5