首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法实现泛型,让ArrayList接受布尔值?

有没有办法实现泛型,让ArrayList接受布尔值?
EN

Stack Overflow用户
提问于 2021-10-07 04:37:27
回答 3查看 52关注 0票数 0

我有以下代码,但是ArrayList不接受'Date‘类型。我唯一能想到的就是合并泛型。然而,我遇到了将它合并到数组列表中的问题。我在网上做了一些搜索,但没有找到好的来源。

Main:

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {

        while(true)
        {
            ATM atm = new ATM();
            atm.init();
            atm.run();
        }
    }
}

类:

代码语言:javascript
复制
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();
        }
    }
}

类:

代码语言:javascript
复制
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);

    }
}

类:

代码语言:javascript
复制
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);
    }

}

错误:

代码语言:javascript
复制
java: incompatible types: java.util.Date cannot be converted to T
EN

回答 3

Stack Overflow用户

发布于 2021-10-07 05:02:18

不能将数据添加到T泛型类型的列表中。setValue方法中存在问题。

代码语言:javascript
复制
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方法中初始化它们。它简化了代码的测试。

代码语言:javascript
复制
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();
    }
票数 0
EN

Stack Overflow用户

发布于 2021-10-07 05:10:01

我猜您真正想要做的是使用UserInfo作为一个类来保存数据,并将这些数据保存在一个通用的Java List中。

因此,像这样定义UserInfo:

代码语言:javascript
复制
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:

代码语言:javascript
复制
List<UserInfo> userInfo = new ArrayList<>();
userInfo.add(new UserInfo(someDate, 1, true));
票数 0
EN

Stack Overflow用户

发布于 2021-10-07 04:56:48

我们需要注意的第一件事是您的类UserInfo是一个generic class

第二件事是,ArrayList<T>也是泛型类;但是,指定的泛型类型是与for UserInfo中指定的类型相同的类型

因此,如果我们使用UserInfo<String> info = new UserInfo<String>();,那么ArrayList<T>实际上就是ArrayList<String>

为了解决你的问题,你应该让你的UserInfo像这样

代码语言:javascript
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69475544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档