所以,我有两节课。一个名为Data的类,另一个名为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中任何给定的Part对象的参数。
我目前的代码试图这样做:
protected String getPartName(Part part)
{
return part.partName;
}
NetBeans认为它无法在类Part中找到变量partName。
我该如何解决这个问题? /为什么这样做?
编辑:新问题:
我有以下开关声明:
@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。我应该声明我的访问器/ mutator方法是静态的吗?
答案 0 :(得分:4)
确保在Part
课程中声明了partName
变量,并且该变量是公共的,并在构造函数中设置它。最后,您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
方法,而实际上我认为您想要访问局部变量{{的实例方法1}}。
<强> TL;博士强>:
基本上,你混合的情况不应该用像Java这样的区分大小写的语言来完成。
只需将part
中的所有Part.whateverMethod(...
更改为part.whateverMethod(...
即可。
您的代码应如下所示:
switch