我有以下代码,但是ArrayList不接受'Date‘类型。我唯一能想到的就是合并泛型。然而,我遇到了将它合并到数组列表中的问题。我在网上做了一些搜索,但没有找到好的来源。
Main:
public class Main {
public static void main(String[] args) {
while(true)
{
ATM atm = new ATM();
atm.init();
atm.run();
}
}
}类:
import java.util.Scanner;
class ATM{
private LCD lcd;
private CardReader cardReader;
private Keypad keypad;
private CashDispenser cashDispenser;
public void init(){
System.out.println("ATM.init()");
lcd = new LCD();
lcd.init();
cardReader = new CardReader();
cardReader.init();
cashDispenser = new CashDispenser();
cashDispenser.init();
}
public void run(){
int count = 0;
boolean correct;
int tries = 0;
System.out.println("ATM.run()");
System.out.println("Please select a four digit pin");
Scanner pin = new Scanner(System.in);
int pins = pin.nextInt();
int pins2 = pins;
keypad = new Keypad();
while(pins != pins2 && tries <= 4)
{
pins2 = keypad.init();
count++;
tries++;
}
if(pins == pins2)
{
correct = false;
}
else
{
correct = true;
}
String BANK_NAME = "NewCo";
System.out.println("ATM Version 0.1.0");
System.out.println("Copyright (C) 2020" + BANK_NAME);
System.out.println("Code by Julian Blanco");
User user = new User(lcd, cardReader,keypad, cashDispenser, count, correct);
while(true){
user.io();
}
}
}类:
import java.util.Date;
import java.util.ArrayList;
public class UserInfo<T>
{
private ArrayList<T> values;
public UserInfo(){
this.values = new ArrayList<T>();
}
public void setValue(Date date,int count, boolean correct)
{
this.values.add(date, count, correct);
}
}类:
import java.util.ArrayList;
import java.util.Date;
public class Logger
{
ArrayList<UserInfo> obj = new ArrayList<UserInfo>();
public Logger(Date date, int count, boolean correct){
obj.get(0).setValue(date,count, correct);
}
}错误:
java: incompatible types: java.util.Date cannot be converted to T发布于 2021-10-07 05:02:18
不能将数据添加到T泛型类型的列表中。setValue方法中存在问题。
public class UserInfo<T>
{
private ArrayList<T> values;
public UserInfo(){
this.values = new ArrayList<T>();
}
public void setValue(T value)
{
this.values.add(value);
}
}此外,在UserInfo类中真的有必要使用泛型吗?如果你想存储日期,计数和校正值,你应该为它创建一个类。
此外,我将获得ATM对象的依赖关系(lcd,...)在构造函数中,只在init方法中初始化它们。它简化了代码的测试。
class ATM{
private LCD lcd;
private CardReader cardReader;
private Keypad keypad;
private CashDispenser cashDispenser;
public ATM(LCD lcd, CardReader cardReader, Keypad keypad, CashDispenser cashDispenser){
this.lcd = lcd;
this.cardReader = cardReader;
this.keypad = keypad;
this.cashDispenser = cashDispenser;
}
public void init(){
System.out.println("ATM.init()");
lcd.init();
cardReader.init();
cashDispenser.init();
}发布于 2021-10-07 05:10:01
我猜您真正想要做的是使用UserInfo作为一个类来保存数据,并将这些数据保存在一个通用的Java List中。
因此,像这样定义UserInfo:
public class UserInfo {
private final Date date;
private final int count;
private final boolean correct;
public UserInfo(Date date, int count, boolean correct) {
this.date = date;
this.count = count;
this.correct = correct;
}
public Date getDate() {
return date;
}
public int getCount() {
return count;
}
public boolean isCorrect() {
return correct;
}
}然后你可以像这样使用普通的List.add:
List<UserInfo> userInfo = new ArrayList<>();
userInfo.add(new UserInfo(someDate, 1, true));发布于 2021-10-07 04:56:48
我们需要注意的第一件事是您的类UserInfo是一个generic class
第二件事是,ArrayList<T>也是泛型类;但是,指定的泛型类型是与for UserInfo中指定的类型相同的类型
因此,如果我们使用UserInfo<String> info = new UserInfo<String>();,那么ArrayList<T>实际上就是ArrayList<String>。
为了解决你的问题,你应该让你的UserInfo像这样
import java.util.Date;
import java.util.ArrayList;
public class UserInfo {
private ArrayList<Date> values;
public UserInfo(){
this.values = new ArrayList<Date>();
}
public void setValue(Date date, int count, boolean correct){
this.values.add(date, count, correct);
}
}虽然您没有问到这一点,但我非常确定ArrayList没有一个接受3个参数的overload for add。
https://stackoverflow.com/questions/69475544
复制相似问题