在 java 的静态方法中访问全局变量

access global variable in static method in java

有没有办法在静态方法中使用全局变量?我的目标是打印包含对象(食物和非食物)的 ArrayList 的内容。我认为 toString() 方法是打印它的最佳方式,但似乎无法让它工作。我曾尝试使用全局变量,但是当我使用 this. 关键字时,它说不能在静态上下文中使用它。这些方法必须是静态的,因为我不想实例化 class。有什么建议吗?

printInven() 方法中我也尝试过 System.out.println(i+1 + " " + inven.get(i).toString()); 我完全可以使用不同的方法打印 ArrayList 中的对象。我认为让全局变量工作将是使用 toString() 方法的最佳方式。

import java.util.ArrayList;
import java.util.Scanner;

public class Inventory{
    public static ArrayList<Items> inven = new ArrayList<Items>();
    Scanner scan = new Scanner (System.in);
    private String name;
    private static int ID;
    private double price;
    private boolean in_stock;
    private boolean food;
    public static void main(String[] args) {
    
    }

    //Add Food Item
    public static void addFood(String name, int ID, double price, boolean in_stock, boolean food){
        name = name;
        ID = ID;
        price = price;
        in_stock = in_stock;
        food = food;

        Food newFood = new Food(name, ID, price, in_stock, food);
        inven.add(newFood);
    }

    //Add Non food item
    public static void addNonFood(String name, int ID, double price, boolean in_stock, boolean food){
        name = name;
        ID = ID;
        price = price;
        in_stock = in_stock;
        food = food;

        NonFood newNonFood = new NonFood(name, ID, price, in_stock, food);
        inven.add(newNonFood);
    }

    //Delete inventory
    public static void delInven(int num){
        inven.remove(num);
    }

     //Print Inventory
    public static void printInven(){
        for(int i = 0; i < inven.size(); i++){
            System.out.println(i+1 + " " + inven.get(i));
        }
    }
    

    //Clear Inventory
    public static void clearInven(){
        inven.clear();
    }

    //Replace item
    //Polymorphism for food and non food items
    public static void replaceNewNonFoodInven(int n, String name, int ID, double price, boolean in_stock, boolean food){
        name = name;
        ID = ID;
        price = price;
        in_stock = in_stock;
        food = food;
        NonFood newNonFood = new NonFood(name, ID, price, in_stock, food);
        inven.set(n, newNonFood);
    }    
}

您可以参考下面的代码。我希望这能解决您的疑问。

public class 非食品 {

private String name;
private static int ID;
private double price;
private boolean in_stock;
private boolean food;

public NonFood(String name, int iD, double price, boolean in_stock, boolean food) {
    this.name = name;
    this.ID = iD;
    this.price = price;
    this.in_stock = in_stock;
    this.food = food;
}

@Override
public String toString() {
    return "Name: '" + this.name + "' ID: '" + this.ID + "' price: '" + this.price + "' in_stock: '" + this.in_stock + "' food: '" + this.food +"'";
}

}

public class 食物 {

private String name;
    private static int ID;
    private double price;
    private boolean in_stock;
    private boolean food;

public Food(String name, int iD, double price, boolean in_stock, boolean food) {
    this.name=name;
    this.ID=iD;
    this.price=price;
    this.in_stock=in_stock;
    this.food=food;
}

@Override
public String toString() {
    return "Name: '" + this.name + "' ID: '" + this.ID + "' price: '" + this.price + "' in_stock: '" + this.in_stock + "' food: '" + this.food +"'";
}

}

public class库存{

public static ArrayList<Object> inven = new ArrayList<Object>();
Scanner scan = new Scanner (System.in);

private String name;
private static int ID;
private double price;
private boolean in_stock;
private boolean food;

public static void main(String[] args) {

    for (int i = 0; i < 2; i++) {
        addFood("Food"+i, i, 100+i, true, true);
    }
    
    for (int i = 0; i < 2; i++) {
        addNonFood("NonFood"+i, i, 100+i, true, true);
    }
    
    printInven();
}

//Add Food Item
public static void addFood(String name, int ID, double price, boolean in_stock, boolean food){
  Food newFood = new Food(name, ID, price, in_stock, food);
    inven.add(newFood);
}

//Add Non food item
public static void addNonFood(String name, int ID, double price, boolean in_stock, boolean food){
    NonFood newNonFood = new NonFood(name, ID, price, in_stock, food);
    inven.add(newNonFood);
}

//Delete inventory
public static void delInven(int num){
    inven.remove(num);
}

 //Print Inventory
public static void printInven(){
    for(int i = 0; i < inven.size(); i++){
        System.out.println(i+1 + " " + inven.get(i));
    }
}


//Clear Inventory
public static void clearInven(){
    inven.clear();
}

//Replace item
//Polymorphism for food and non food items
public static void replaceNewNonFoodInven(int n, String name, int ID, double price, boolean in_stock, boolean food){
    NonFood newNonFood = new NonFood(name, ID, price, in_stock, food);
    inven.set(n, newNonFood);
}    

}