2016-04-27 2 views
-1

Я просмотрел другие ответы на эту тему и не нашел ничего, чтобы помочь. Вот классы у меня есть:Нестатический метод нельзя ссылаться из статического контекста, но ничего не статично

import java.util.ArrayList; 

/** 
* Manage the stock in a business. 
* The stock is described by zero or more Products. 
* 
* @author 
* @version 
*/ 
public class StockManager 
{ 
// A list of the products. 
private ArrayList<Product> stock; 

/** 
* Initialise the stock manager. 
*/ 
public StockManager() 
{ 
    stock = new ArrayList<Product>(); 
} 

/** 
* Add a product to the list. 
* @param item The item to be added. 
*/ 

public void addProduct(Product item) 
{ 

    for(Product product: stock) 
    { 
     if(Product.getID() == item) 
     { 
      System.out.println("Please add an item with a different id"); 
     } 

     else 
     { 
     stock.add(item); 

     } 
    } 
} 

/** 
* Receive a delivery of a particular product. 
* Increase the quantity of the product by the given amount. 
* @param id The ID of the product. 
* @param amount The amount to increase the quantity by. 
*/ 

public void delivery(int id, int amount) 
{ 
    for(Product product : stock) 
    { 
     if(findProduct(id) != null) 
     { 
      increaseQuantity(amount); 

     } 

    } 
} 

/** 
* Try to find a product in the stock with the given id. 
* @return The identified product, or null if there is none 
*   with a matching ID. 
*/ 

public Product findProduct(int id) 
{ 
    for(Product product : stock) 
    { 
     if(id == getID()) 
     { 
     return getName(); 
     } 

     else 
     { 
      return null; 
     } 



    } 
} 

/** 
* Locate a product with the given ID, and return how 
* many of this item are in stock. If the ID does not 
* match any product, return zero. 
* @param id The ID of the product. 
* @return The quantity of the given product in stock. 
*/ 
public int numberInStock(int id) 
{ 
    for(Product product : stock) 
    { 
     if(id == getID()) 
     { 
      getQuantity(); 
     } 

     else 
     { 
      return 0; 
     } 
    } 


} 

/** 
* Print details of all the products. 
*/ 
public void printProductDetails() 
{ 
    for(Product product: stock) 
    { 
     toString(); 
    } 
} 


/** 
* This method prints the deatils 
* of products under a certain quantity 
* @param the amount you want to check under 
*/ 
public void lowStockCheck(int amount) 
{ 
    for(Product product : stock) 
    { 
     if(getQuantity() < amount) 
     { 
      printProductDetails(); 
     } 
    } 

} 

/** 
* Find a product via it's name 
* rather than ID 
* @param Name of product 
*/ 
public Product findProductName(String name) 
{ 
    for(Product product : stock) 
    { 
     if(name.equals(getName())) 
     { 
      return getName(); 
     } 
     else 
     { 
      return null; 
     } 

    } 
} 

А вот класс продукта:

/** 
* Model some details of a product sold by a company. 
* 
* @author David J. Barnes and Michael Kölling. 
* @version 2011.07.31 
*/ 
public class Product 
{ 
    // An identifying number for this product. 
    private int id; 
    // The name of this product. 
    private String name; 
    // The quantity of this product in stock. 
    private int quantity; 

/** 
* Constructor for objects of class Product. 
* The initial stock quantity is zero. 
* @param id The product's identifying number. 
* @param name The product's name. 
*/ 
public Product(int id, String name) 
{ 
    this.id = id; 
    this.name = name; 
    quantity = 0; 
} 

/** 
* @return The product's id. 
*/ 
public int getID() 
{ 
    return id; 
} 

/** 
* @return The product's name. 
*/ 
public String getName() 
{ 
    return name; 
} 

/** 
* @return The quantity in stock. 
*/ 
public int getQuantity() 
{ 
    return quantity; 
} 

/** 
* @return The id, name and quantity in stock. 
*/ 
public String toString() 
{ 
    return id + ": " + 
      name + 
      " stock level: " + quantity; 
} 

/** 
* Restock with the given amount of this product. 
* The current quantity is incremented by the given amount. 
* @param amount The number of new items added to the stock. 
*    This must be greater than zero. 
*/ 
public void increaseQuantity(int amount) 
{ 
    if(amount > 0) { 
     quantity += amount; 
    } 
    else { 
     System.out.println("Attempt to restock " + 
          name + 
          " with a non-positive amount: " + 
          amount); 
    } 
} 

/** 
* Sell one of these products. 
* An error is reported if there appears to be no stock. 
*/ 
public void sellOne() 
{ 
    if(quantity > 0) { 
     quantity--; 
    } 
    else { 
     System.out.println(
      "Attempt to sell an out of stock item: " + name); 
    } 
} 

Я получаю ошибку в функции addProduct в классе StockManager. Этот кусок коды специально

/** 
* Add a product to the list. 
* @param item The item to be added. 
*/ 

public void addProduct(Product item) 
{ 

    for(Product product: stock) 
    { 
     if(Product.getID() == item) 
     { 
      System.out.println("Please add an item with a different id"); 
     } 

     else 
     { 
     stock.add(item); 

     } 
    } 
} 

Ошибка говорит «не статический метод GetId() не может ссылаться из статического контекста» Ни один из этих методов является статическим, так как в данный момент у нас нет никакой потребности в них , Что мне здесь не хватает?

+5

Вы имели в виду 'product.getID()', с _lowercase_ 'p'? – rgettman

+2

Добро пожаловать в переполнение стека. Пожалуйста, всегда старайтесь уменьшить свою проблему до [mcve] - здесь вы использовали более 250 строк кода, для чего-то, что могло быть показано примерно в 15. –

+0

О, боже. Я пытался это исправить как три дня. Спасибо огромное! – Blaza

ответ

0

Вы вызываете Product.getID(). Продукт - это имя класса и единственные методы, которые вы можете вызвать таким образом, - это методы статического класса. В вашем случае getID() не является статическим методом и поэтому должен быть вызван экземпляром класса. Продукт не является экземпляром Product, p должен быть строчным в обращении к самому объекту.

0

Заменить:

if(Product.getID() == item) 

с:

if(product.getID() == item) 

Product (с заглавным Р) является имя_классом в то время как product этого имя экземпляра.

0

Метод getID - метод экземпляра. Это означает, что вам нужно будет создать для него объект, чтобы использовать его и получить доступ к полям данных этого класса, чтобы он мог возвращать идентификатор созданного объекта OBJECT.

Фактически вы обращаетесь к методу, вызывая имя класса, как вы вызываете статический метод. Но он не будет называть его class.methodName(); Попробуйте позвонить прямо.

Смежные вопросы

 Смежные вопросы