java - 如何访问对象的这个参数

标签 java oop object arraylist visibility

所以,我有两个类(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 认为你想要访问一个 staticPart 的方法,实际上我认为你想访问局部变量 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/

相关文章:

java - 坚持使用 lambda 表达式和 Map

java - Android:下载文件代码不起作用

javascript - 将 JS 数组转换为单个对象

javascript - 为什么 typeof 的结果与传入的表达式的计算结果不同?

java - 如何在Gradle中指定模块的JDK编译级别

java - Java 中温度程序的类声明

JavaScript:好的部分——如何完全不使用 `new`

java - 我可以在公共(public)方法中声明私有(private)变量吗?

C++: "No match for ' 运算符<<' (operand types are ' std::ostream' 和 'Complex' )"

C++ Array of 120 ob​​jects with constructor + parameters, header- + sourcefile, no pointers please!