如何访问对象的此参数

时间:2014-07-11 01:54:07

标签: java oop object arraylist visibility

所以,我有两节课。一个名为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方法是静态的吗?

1 个答案:

答案 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