SCJP 5 - K. Sierra: Runnable r = new Runnable(); ? [Resolvido]

8 respostas
S

Capitulo 9 - pg 388, versão traduzia.

Embora tenha sacado o teor do que foi dito, em um bloco de observação separado é “criado uma instância” da interface Runnable.

Runnable r = new Runnable();

depois ainda diz que é válido (subentendo compilável) chamar o método run da “interface instanciada”:

r.run();

alguém tem a versão original, ou outra versão traduzida para dizer como está?

8 Respostas

italons

acho q estou com a msm duvida q vc, pra mim nao era possível instanciar interfaces…

segue o orignal em ingles

There’s nothing special about the run() method as far as Java is concerned. Like main(), it just happens to be the name (and signature) of the method that the new thread knows to invoke. So if you see code that calls the run() method on a Runnable (or even on a Thread instance), that’s perfectly legal. But it doesn’t mean the run() method will run in a separate thread! Calling a run() method directly just means you’re invoking a method from whatever thread is currently executing, and the run() method goes onto the current call stack rather than at the beginning of a new call stack. The following code does not start a new thread of execution:

Runnable r = new Runnable(); r.run(); // Legal, but does not start a separate thread

evertonsilvagomesjav

A unica maneira de instanciar interface é criando uma classe anonima.

evertonsilvagomesjav

ficaria assim:

Runnable r = new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				
			}
			
		};
E

Como o Everton afirmou, o texto está apenas simplificando o exemplo (ele supõe que você preencha as lacunas mentalmente).

Não é possível instanciar uma interface (é claro, o livro já lhe doutrinou suficientemente para você saber disso), mas obviamente é possível instanciar uma classe anônima que implementa uma interface. Ou seja, quando está escrito no livro:

Runnable r = new Runnable();

obviamente ele quis abreviar isto aqui:

Runnable r = new Runnable() {
    public void run () {
        ... ponha seu código aqui ...
    }
};

É só para você ficar esperto - afinal de contas, o livro é americano (e como bom americano, eles tendem a pensar sem ficar se prendendo excessivamente a detalhes), não brasileiro (onde você tem de ser muito explícito e não deixar espaço para a imaginação, porque você tende a seguir os detalhes e acabar se perdendo nos detalhes).

S

Sim sim, a cultura norte americana tende mais a estimular o exercício mental em relação a nossa, mas deixando o puxa-saquismo norte-americano de lado (…rs)…

O aspecto didático do livro, é extremamente metódico, cauteloso e repetitivo do inicio ao fim (que chega até a enjoar determinadas vezes, rs) no que se refere a sintaxe. Assim como qualquer livro deste gênero tem que ser.

Claro que a primeira alternativa que se pensa são nas classes anônimas, pois estaria implementando Runnable() em um objeto anônimo. Mas pelo motivo que falei, acho muito difícil crer que foi alguma forma de encurtar o código (em uma espécie de pseudo-código) referindo-se a uma classe anônima.

Gostaria de mais sugestões, se possível.

S

opa, vlw pela postagem italons :wink:

S

Pra quem estiver com a mesma dúvida. De fato a citação do livro está incorreta.

Como deveríamos suspeitar desde o principio, o correto é:

Thread t = new Thread();

t.run();

Fonte: Errata Oficial do Livro
http://www.coderanch.com/t/257589/java-programmer-SCJP/certification/SCJP-Errata-Updated

italons

só pra constar: comprei recentemente a edição traduzida do SCJP java 6 e o erro continua lá, página 398.

Criado 3 de agosto de 2010
Ultima resposta 3 de ago. de 2010
Respostas 8
Participantes 4