java - 如何在不作为方法参数传递的情况下访问对象的状态?

标签 java oop

我正在为大学类(class)编写一个程序,用于管理库存,例如添加、删除和租赁 DVD 播放器、家具和电视机等元素。我的问题是,我想要获取对象的保存状态而不将对象作为参数传递到方法中以检索其状态。

ABCRentals.java

private List<Integer> idNumbers = new ArrayList<Integer>();
private List<Item> items = new ArrayList<Item>();
public String[] itemTypes2;

public boolean add(Item item)
{
    if (items.size() >= 300)
        return false;
    else
    {
        idNumbers.add(idNumbers.size() + 1);
        items.add(item);
        return true;
        // Code that adds item to itemTypes2 array (removed to avoid unnecessary code dump)
    }
}

public String[] getItemArray() {
   return itemTypes2;
}

DVDPlayer.java

public int getId(ABCRentals abc)
{
    String[] itemArray = abc.getItemArray();
    int id = Arrays.asList(itemArray).indexOf("DVDPlayer #" + Integer.toString(ID)) + 1;
    return id;
}

驱动程序.java

public static void main(String[] args)
{
    ABCRentals abc = new ABCRentals();
    DVDPlayer item1 = new DVDPlayer();
    boolean flag = abc.add(item1);      
    int id = item4.getId(abc);
    System.out.println("Id: " + id);
}

基本上我的意思是,当我调用Driver类中的getId()方法时,我无法传入abc 对象作为参数以获得其状态,因为我的教授要求我具有某些方法签名,特别是 getId() 需要接受零参数。当实现 add() 方法并添加项目时,abc 对象的状态会发生变化。因此,如果我要在 getId() 方法中创建 ABCRentals 的新实例,它将具有空状态,因为对象中不会添加任何项目。有什么方法可以隐式检索 abc 对象而不将其作为参数传递吗?我上面的代码可以工作,但我的方法签名不能是这样的。

最佳答案

DVDPlayer.java
    private ABCRentals mAbc;

    public void init(ABCRentals abc){
      mAbc = abc;
    }

调用此 init 方法来初始化您的类,然后调用 getId 方法。

关于java - 如何在不作为方法参数传递的情况下访问对象的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119619/

相关文章:

java - 如何在java中从 'null'更改字符串中的占位符文本

java - 为什么我用java向文件写入数据这么慢

java - 如果 Swing 模型的 getter 不是线程安全的,您将如何处理它们?

ruby - 在子类中调用父方法

java - 运行我的 WAR 文件时出现 Tomcat 404 错误

java - DocumentListener 不执行任何操作

javascript - 保护 "private"类成员免遭修改

php - 静态方法与函数的性能

php - spl_autoload_register 和命名空间问题

oop - Rust 特征对象的 &self 不能在特征默认函数中使用