Я работаю над назначением своего класса, и я застрял.
У меня два класса: Part, который является абстрактным и имеет классы InHouse и Outsourced, расширяющие Part. Затем у меня есть Product, у которого, как ни странно, есть observableArrayList частей, называемых connectedParts.
Я работаю над своим AddProductController, пытаясь вызвать метод в Product
class addAssociatedPart()
. Моя проблема в том, что компилятор не находит метод в Part. Если я использую InHouse, он не находит метод в InHouse и так далее. Я не могу использовать метод stati c, потому что метод addAssociatedPart()
должен быть нестандартным c в соответствии с дизайном UML. Итак, я не могу явно указать, чтобы найти его в Product.addAssociatedPart()
, потому что он говорит мне, что я не могу ссылаться на нестатический c et c.
Вот фрагменты кода, начинающиеся с класс продукта.
public class Product {
private ObservableList<Part> associatedParts = FXCollections.observableArrayList();
private int id;
private String name;
private double price;
private int stock;
private int min;
private int max;
public void addAssociatedPart(Part part) {
getAllAssociatedParts().add(part);
}
public ObservableList<Part> getAllAssociatedParts() {
return this.associatedParts;
}
И затем класс AddProductScreenController:
public class AddProductScreenController implements Initializable {
@FXML
public void onAddProductAddPart(ActionEvent event) {
// this is triggered when the Add button is clicked
Part selectedItem = addProductTableViewAll.getSelectionModel().getSelectedItem();
selectedItem.addAssociatedPart(); // can't find method
Product.selectedItem.addAssociatedPart(); // can't find variable selectedItem (obviously bad formatting)
selectedItem.Product.addAssociatedPart(); // can't find variable Product (again bad formatting)
addAssociatedPart(selectedItem); // can't find method addAssociatedPart()
Product.addAssociatedPart(selectedItem); // non-static method, can't be referenced from a static context
InHouse newPart = new InHouse(1, "test", 1.99, 1, 1, 1, 101);
addAssociatedPart(newPart); // can't find method
Product.addAssociatedPart(newPart); // non-static method
newPart.addAssociatedPart(); // can't find method
addProductTableViewPartial.setItems(associatedParts);
}
}
Запрошенный код детали:
public abstract class Part {
private int id;
private String name;
private double price;
private int stock;
private int min;
private int max;
public ObservableList<Part> allParts = FXCollections.observableArrayList();
public Part(int id, String name, double price, int stock, int min, int max) {
this.id = id;
this.name = name;
this.price = price;
this.stock = stock;
this.min = min;
this.max = max;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setPrice(double price) {
this.price = price;
}
public double getPrice() {
return this.price;
}
public void setStock(int stock) {
this.stock = stock;
}
public int getStock() {
return this.stock;
}
public void setMin(int min) {
this.min = min;
}
public int getMin() {
return this.min;
}
public void setMax(int max) {
this.max = max;
}
public int getMax() {
return this.max;
}
}
Это InHouse
package model;
public class InHouse extends Part {
private int machineId;
public InHouse(int id, String name, double price, int stock, int min, int max, int machineId) {
super(id, name, price, stock, min, max);
this.machineId = machineId;
}
public void setMachineId(int machineId) {
this.machineId = machineId;
}
public int getMachineId() {
return this.machineId;
}
}
И затем Аутсорсинг:
package model;
public class Outsourced extends Part {
private String companyName;
public Outsourced(int id, String name, double price, int stock, int min, int max, String companyName) {
super(id, name, price, stock, min, max);
this.companyName = companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCompanyName() {
return this.companyName;
}
}
Если есть конкретная часть Java, вы чувствуете, что мне нужно sh, чтобы понять это, я открыт для этого. Я хочу разобраться в проблеме, а не просто исправить ее. Я даже не ищу ответа, просто указание на то, в чем проблема.
Обновление
@ Le и @Jackson указали мне правильное направление своими комментариями ответ, который он предоставил. Сначала мне нужен товар:
Product product = new Product(1, "test", 1.99, 1, 1, 1);
product.addAssociatedPart(selectedItem);