es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede acceder a la función de lectura en la clase FILEREADER cuando se utiliza una clase genérica. ¿Alguien podría decirme por qué no puedo acceder a la función de lectura aquí?

No se puede acceder a la función de lectura en la clase FILEREADER al utilizar una clase genérica. ¿Alguien puede informarme por qué no puedo acceder a la función de lectura aquí?

Clase principal:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class MainIO {
  public static void main(String[] args) throws Exception {
    System.out.println("Dentro de la clase MainIO");
    FileReader fr = null;
    GenericInput gio;
    try {
      fr = new FileReader("C:\\Users\\alex\\IdeaProjects\\javaIO\\src\\inputfile.txt");
      gio = new GenericInput(fr);
      gio.readByteData(fr);
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }
}

Segunda clase:

import java.io.FileReader;
import java.io.InputStream;

public class GenericInput <t> {
  T input;
  public GenericInput(T input) {
    System.out.println("Dentro de: " + input.getClass().getName());
    this.input = input;
  }
  public void readByteData(T input) throws Exception {
    int c;
    while ((c = input.read()) != -1)
      System.out.print(c + "-");
  }
}

Archivo de texto de entrada:

pythön

Error:

C:\Users\alex\IdeaProjects\javaIO\src\GenericInput.java:14:25
java: no se puede encontrar el símbolo
símbolo: método read()
ubicación: variable input de tipo T

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el compilador no puede encontrar el método read() en el tipo T. El problema aquí es que estás utilizando una clase genérica GenericInput que puede aceptar cualquier tipo de entrada, pero estás intentando llamar a un método específico read() en esa entrada sin verificar si es compatible con el tipo de entrada.

    Para solucionar este error, necesitas restringir el tipo T para que solo acepte tipos de entrada que admitan el método read(). Puedes hacer esto definiendo una restricción de tipo en T usando la palabra clave extends. Por ejemplo, puedes cambiar la declaración de la clase a:

    public class GenericInput<t extends="" inputstream=""> {
        // ...
    }
    

    Esto restringe T para que solo acepte tipos de entrada que extiendan la clase InputStream, la cual proporciona el método read().

    Alternativamente, si deseas admitir otros tipos de entrada además de InputStream, puedes definir tu propia interfaz que tenga un método read(), y luego usar eso como restricción de tipo en T.

    interface Readable {
        int read() throws IOException;
    }
    
    public class GenericInput<t extends="" readable=""> {
        // ...
    }
    

    De cualquier manera, al restringir el tipo T para que solo acepte tipos de entrada que admitan el método read(), deberías poder acceder a este método dentro de la clase GenericInput sin errores.

Comments are closed.