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

时间:2019-09-26 14:59:33

标签: java oop

我正在编写一个用于管理库存的大学班计划,例如通过添加,删除和租借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;
}

Driver.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);
}

基本上,我的意思是,当我在getId()类中调用Driver方法时,我无法将abc对象作为参数传递来获取其状态,因为我的教授要求我具有某些方法签名,尤其是getId()必须接受零参数。在实现abc方法并添加项目时,add()对象的状态会更改。因此,如果我要在ABCRentals方法内创建getId()的新实例,则该状态将为空,因为该对象中没有添加任何项目。有什么方法可以隐式检索abc对象而不将其作为参数传递吗?上面的代码可以正常工作,但是我的方法签名不能做到这一点。

1 个答案:

答案 0 :(得分:0)

DVDPlayer.java
    private ABCRentals mAbc;

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

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