所以,我有两个类(class)。一个类称为 Data,另一个类称为 Part。 (它用于库存跟踪程序)。数据处理信息的序列化和程序运行的数据处理。 Part 本质上只包含一个构造函数。我知道这不是最理想的面向对象的设置,但后面的程序功能将使此设置非常方便。
无论如何,Part 类具有以下构造函数:
Part(String partName, String Make, String PartNumber,
String altPartNumber, BigDecimal price, int quantity,
String description, boolean automotive, boolean marine,
boolean industrial)
{
}
Data 类包含此 ArrayList,稍后将在 JTable 中使用:
protected ArrayList<Part> parts;
Part 类中有多个访问器方法,其中包括访问存储在 ArrayList 中的 Part 对象的每个参数的方法。预期的功能是能够访问(以及稍后设置,如果您预见到任何潜在的困难,任何提示也会有所帮助)零件 ArrayList 中任何给定零件对象的参数。
我目前的代码试图做到这一点:
protected String getPartName(Part part)
{
return part.partName;
}
NetBeans 提示它在类 Part 中找不到变量 partName。
我该如何解决这个问题?/为什么要这样做?
编辑:新问题:
我有以下 switch 语句:
@Override
public Object getValueAt(int row, int column)
{
Part part = getRow(row); // Gets the part in question
switch(column)
{
case 0:
return Part.getPartName(part);
case 1:
return Part.getMake();
case 2:
return Part.getPartNumber();
case 3:
return Part.getAltPartNumber();
case 4:
return Part.getPrice();
case 5:
return Part.getQuantity();
case 6:
return Part.isAutomotive();
case 7:
return Part.isMarine();
case 8:
return Part.isIndustrial();
default:
return null; // This shouldn't ever be called.
}
}
但是,NetBeans 现在提示“不能从静态上下文中引用非静态方法 getPartName。我应该将我的访问器/修改器方法声明为静态的吗?
最佳答案
确保在您的 Part
类中声明了 partName
变量并且它是公共(public)的,并且还在您的构造函数中设置了它。最后,您的 Part
类应该如下所示:
public class Part {
public String partName;
public Part(String partName, String Make, String PartNumber,
String altPartNumber, BigDecimal price, int quantity,
String description, boolean automotive, boolean marine,
boolean industrial) {
this.partName = partName;
}
}
这使得变量 partName
对所有其他具有 Part
实例的类可见,方法是 public
。这也将该变量设置为构造函数中传递的值。
如果您计划以与 partName
相同的方式访问它们,您也应该对其他变量执行此操作:
public class Part {
public String partName, Make, PartNumber, altPartNumber, description;
public BigDecimal price;
public int quantity;
public boolean automotive, marine, industrial;
public Part(String partName, String Make, String PartNumber,
String altPartNumber, BigDecimal price, int quantity,
String description, boolean automotive, boolean marine,
boolean industrial) {
this.partName = partName;
this.Make = Make;
this.PartNumber = PartNumber;
this.altPartNumber = altPartNumber;
this.description = description;
this.price = price;
this.quantity = quantity;
this.automotive = automotive;
this.marine = marine;
this.industrial = industrial;
}
}
现在 NetBeans 应该可以很好地编译它。
编辑
这是您新编辑的答案。 (注意:下一次,你应该问一个新问题而不是编辑一个旧问题 :))。无论如何,解决方案很简单。在您的代码中,您有一个名为 part
(小写“p”)的部分变量,还有一个名为 Part
(大写“P”)的类,但是在您的 switch
语句 你正在使用像 Part.getPartName(...
这样带有大写“P”的语句。因此,Java 认为你想要访问一个 static
类 Part
的方法,实际上我认为你想访问局部变量 part
的实例方法。
长话短说:
基本上,您正在混合使用 Java 等区分大小写的语言不应完成的情况。
解决方案编辑:
只需将 switch
中的所有 Part.whateverMethod(...
更改为 part.whateverMethod(...
。
您的代码应如下所示:
@Override
public Object getValueAt(int row, int column)
{
Part part = getRow(row); // Gets the part in question
switch(column)
{
case 0:
return part.getPartName(part); // lowercase "part"
case 1:
return part.getMake(); // lowercase "part"
case 2:
return part.getPartNumber(); // lowercase "part"
//... do you see what I'm trying to do here?
// continue to do this for all your other "Part.whateverMethod("
关于java - 如何访问对象的这个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689024/