java - 类型不适用,我找不到错误
问题描述
读完,这里开头是代码:
班级:
package Relatorio;
public class Cliente {
private String nome;
private String sexo;
private int idade;
private double salario;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}
班级:
package Relatorio;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
public class Leitor {
Charset utf8 = StandardCharsets.UTF_8;
Path path = null;
String line = null;
public ArrayList<String> ler(String url) {
path = Paths.get(url);
ArrayList<String> lines = null;
try (BufferedReader reader = Files.newBufferedReader(path, utf8)) {
lines = new ArrayList<>();
while((line = reader.readLine()) != null) {
lines.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
public ArrayList<Object> lerRelatorio(String url, Relatorio relatorio) {
path = Paths.get(url);
ArrayList<Object> lines = null;
try (BufferedReader reader = Files.newBufferedReader(path, utf8)) {
lines = new ArrayList<>();
while((line = reader.readLine()) != null) {
lines.add(relatorio.tipoDoRelatorio(line));
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
}
班级:
package Relatorio;
import java.util.ArrayList;
import Praticando.Cliente;
public abstract class Relatorio {
public abstract Cliente tipoDoRelatorio(String line);
public abstract void apresentarRelatorio(ArrayList<Cliente> listaClientes);
}
班级:
package Relatorio;
import java.util.ArrayList;
import Praticando.Cliente;
public class RelatorioBasico extends Relatorio {
Cliente cliente = null;
int aux = 0;
@Override
public Cliente tipoDoRelatorio(String line) {
if(aux == 0) {
cliente = new Cliente();
cliente.setNome(line);
}
if(aux == 1) {
cliente.setSexo(line);
}
if(aux == 2) {
cliente.setIdade(Integer.parseInt(line));
}
if(aux == 3) {
cliente.setSalario(Double.parseDouble(line));
aux = -1;
}
aux++;
return cliente;
}
@Override
public void apresentarRelatorio(ArrayList<Cliente> listaClientes) {
for(Cliente cli : listaClientes) {
System.out.println("Nome: " + cli.getNome() + ", tem " + cli.getIdade() + " anos e é do sexo " + cli.getSexo() + ".");
}
}
}
班级:
package Relatorio;
public class AppTeste {
public static void main(String[] args) {
Leitor leitor = new Leitor();
RelatorioBasico relatorio = new RelatorioBasico();
relatorio.apresentarRelatorio(leitor.lerRelatorio("C:/arquivo.txt", relatorio));
}
}
错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method apresentarRelatorio(ArrayList<Cliente>) in the type RelatorioBasico is not applicable for the arguments (ArrayList<Object>)
at Relatorio.AppTeste.main(AppTeste.java:10)
似乎没问题,即使我在 AppTeste 类中进行测试时,我声明:
relatorio.apresentarRelatorio(leitor.lerRelatorio("C:/arquivo.txt", relatorio));
已经出现了一个警告说:
The method apresentarRelatorio(ArrayList<Cliente>) in the type RelatorioBasico is not applicable for the arguments (ArrayList<Object>)
我认为这可能是因为 Reader 类中的方法:
public ArrayList<Object> lerRelatorio(String url, Relatorio relatorio) {
path = Paths.get(url);
ArrayList<Object> lines = null;
try (BufferedReader reader = Files.newBufferedReader(path, utf8)) {
lines = new ArrayList<>();
while((line = reader.readLine()) != null) {
lines.add(relatorio.tipoDoRelatorio(line));
}
} catch (IOException e) {
e.printStackTrace();
}
return lines;
}
零件:
public ArrayList<Object> lerRelatorio(String url, Relatorio relatorio) {
ArrayList<Object> lines = null;
因为 ArrayList,但即使是特定的 ArrayList,它也会一直出错,我已经阅读并重读了很多次,但我不知道它可能是什么以及我错在哪里......
拜托,如果有人意识到这个错误,你能告诉我吗?
如果有人需要源代码,请链接: https ://github.com/frnndio/Praticando/tree/master/PraticandoJava/src/Relatorio
解决方案
此错误表明该方法apresentarRelatorio(ArrayList<Cliente>)
需要一个,ArrayList<Cliente>
但您正在使用一个ArrayList<Object>
.
您已正确识别出需要更改的行:
public ArrayList<Object> lerRelatorio(String url, Relatorio relatorio) {
应该
public ArrayList<Cliente> lerRelatorio(String url, Relatorio relatorio) {
和
ArrayList<Object> lines = null;
应该
ArrayList<Cliente> lines = null;
编辑:此外,您的代码中有两个类的副本Cliente
,一个Praticicando
在Relatorio
. RelatorioBasico.apresentarRelatorio()
期望Praticando.Cliente
实例但Leitor.lerRelatorio()
创建Relatorio.Cliente
实例。
Relatorio.java
两者的第 5 行都RelatorioBasic.java
导入了 Practicando.Cliente,这是导致该错误的原因:
import Practicando.Cliente;
删除这 2 个 import 语句,您的代码将编译。
推荐阅读
- javascript - 使用 JSON 和 Javascript 进行实时搜索,但返回检查重复项:控制台中的 insertTimeout
- python - 从 C++ 调用网络摄像头并在 Python 中显示图像
- json - 选择 JSON 列会占用太多查询执行时间
- javascript - 我怎样才能像 flex-direction 一样设置我的孩子的方向,但不使用 flex?
- python - Tkinter - 如何创建一个选项卡并将内容移动到它?
- java - 短暂不活动后,Openshift 服务不可用
- python - python中的zipfile模块来压缩文件
- javascript - 如何从javascript中的数据中删除标签?
- java - 如何将 .cpp C++ 本机库导入 Android Studio
- android - 如何在 Android 中自定义 ContextMenu?