Java estática o variable herencia

Interfaz de usuario UX:

Digamos que tengo 3 clases A, B, C, y mi principal. B se extiende A. Quiero usar un escáner en todos ellos incluyen mi principal. debería mover el escáner por herencia o debo usar estática y declarar mi escáner en mi principal?

Traté de mirar aquí, pero no conseguir una respuesta clara cuál es mejor: ¿Hay alguna manera de poder utilizar un objeto escáner en una clase diferente?

public class Main {
    public static Scanner staticScanner = new Scanner (System.in);
public static void main(String[] args) {
    Scanner sc = new Scanner (System.in);
    A a = new A(sc);
    C c = new C();
    c.cDoSomething(sc);
    sc.close();
    }

public class A {
    private Scanner sc;
    public A (Scanner sc){
    this.sc = sc;
    }
    public void aDoSomething(){
         B b = new B();
         b.bDoSomething(sc);

    }

public class B extends A {
    public void bDoSomething(Scanner sc){

    }

public class C {
    public void cDoSomething(Scanner sc){

    }

Como he dicho anteriormente me gustaría entender qué método es el mejor y es la correcta para su uso. staticScanner y lo llaman por mi clase principal o mover el escáner SC entre las clases, según sea necesario

Trevor Freeman:

Creo que la respuesta aquí puede depender de algunos de los aspectos específicos de las clases y la situación subyacente, particularmente en lo que respecta a la forma acoplada el estado del escáner puede estar en el estado de otras variables en las clases y el número de métodos o invocaciones separadas a nivel .

En general, sin embargo, yo personalmente prefiero c.doSomething(sc);si no hay un estado interno que se mantiene en la clase C entre invocaciones de métodos. Es decir, que no tenemos c.doSomething1(sc)y c.doSomething2(sc)que necesitan ser llamados en el orden contra el mismo escáner debido al estado interno está modificando en C.

El argumento contrario es si estamos haciendo lo que es efectivamente un contenedor (o alguna forma de decorador) alrededor del escáner que tiene sentido perfecto para pasar el escáner a la clase en el constructor y mantener una referencia a la misma. Es decir, si queremos tener algo como:

MyReader reader = new MyReader(scanner);
MyObject myObject = reader.readNextMyObject();

Sin embargo, creo que sería muy confuso si estábamos leyendo desde el mismo escáner a través de múltiples envolturas intercaladas en el código:

// I think the below would be UGLY, at least imho.
MyReaderA readerA = new MyReaderA(scanner);
MyReaderB readerB = new MyReaderB(scanner);
MyObjectX obj1 = readerA.readMyObject();
MyObjectY obj2 = readerB.readMyObject();

Creo que sería confuso que dos lectores diferentes están operando en el mismo escáner y moviendo su índice.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=229731&siteId=1
Recomendado
Clasificación