Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/11/2013, 03:45
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: El esqueleto de Java

Hola:

Aunque es lo mismo que comenta Xerelo, lo explico de otra forma por si puede ayudar.

Scanner es una clase que tiene un constructor que acepta un InputStream como parámetro http://docs.oracle.com/javase/7/docs...l/Scanner.html y System.in es justamente un Input Stream http://docs.oracle.com/javase/7/docs...ng/System.html , así que no hay nada extraño en

Scanner variable=new Scanner(System.in)

simplemente estás haciendo un new de la clase Scanner pasándole un parámetro del mismo tipo que admite.

En cuanto a este tipo de encadenamiento

Texto=Texto.append(texto).reverse();

se puede hacer si append devuelve la misma clase, en vez de un resultado. Por ejemplo

Código Java:
Ver original
  1. public class Acumulador {
  2.     private int acumulado=0;
  3.     public int getAcumulado() {
  4.         return acumulado;
  5.     }
  6.     public Acumulador acumula(int valor) {
  7.         acumulado+=valor;
  8.         return this;  // este return es lo que permite encadenar metodos cuando se llama a acumula()
  9.     }
  10. }

De esta forma, como el método acumula() devulve un Acumulador, puedes encadenar llamadas

Código Java:
Ver original
  1. Acumulador acumulador = new Acumulador();
  2. // Podriamos hacer llamadas de la forma habitual
  3. acumulador.acumula(11);
  4. // pero como acumula() devuelve un Acumulador, podemos llamar más métodos de Acumulador
  5. int total = acumulador.acumula(12).acumula(14).acumula(1).getAcumulado();

Por supuesto, y como comenta Xerelo de forma más general, un método puede devolver cualquier tipo de objeto, no necesariamente un this, y así podrías llamar, de forma encadenada o no, a métodos de ese tipo de objeto distinto

variableClaseA.metodoDeA().metodoDeB().metodoDeC()

siempre que metodoDeA() devuelva un objeto de tipo B y metodoDeB() devuelva un objeto de tipo C.

Y aunque no va exactamente con la pregunta, simplemente comentar que esta llamada encadena de objetos de distintos tipos en general y salvo para casos muy concretos, no es buena costumbre de programación. La línea anterior

variableClaseA.metodoDeA().metodoDeB().metodoDeC()

hace que la clase a la que pertenece tenga que ver las clase A, B y C, además de tener que cambiarla si cambia cualquiera de los métodos. Siempre es aconsejable "ocultar" información y si variableClaseA.hazCosas() se encarga de llamar a metodoDeB() y metodoDeB() se encarga por dentro de llamar a metodoDeC(), tu código quedaría como

variableClaseA.hazCosas()

y solo necesita ver clase A y solo necesita cambiarse si cambia el método hazCosas().

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 23/11/2013 a las 03:54