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
davy.ai
El mensaje de error indica que el compilador no puede encontrar el método
read()
en el tipoT
. El problema aquí es que estás utilizando una clase genéricaGenericInput
que puede aceptar cualquier tipo de entrada, pero estás intentando llamar a un método específicoread()
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étodoread()
. Puedes hacer esto definiendo una restricción de tipo enT
usando la palabra claveextends
. Por ejemplo, puedes cambiar la declaración de la clase a:Esto restringe
T
para que solo acepte tipos de entrada que extiendan la claseInputStream
, la cual proporciona el métodoread()
.Alternativamente, si deseas admitir otros tipos de entrada además de
InputStream
, puedes definir tu propia interfaz que tenga un métodoread()
, y luego usar eso como restricción de tipo enT
.De cualquier manera, al restringir el tipo
T
para que solo acepte tipos de entrada que admitan el métodoread()
, deberías poder acceder a este método dentro de la claseGenericInput
sin errores.