【问题标题】:Cannot find symbol method找不到符号方法
【发布时间】:2015-01-19 13:13:23
【问题描述】:

编译时出现找不到符号-方法add(java.lang.String)的错误。到目前为止,代码的目标只是为ArrayList 添加新的风格。我正在使用 BlueJ IDE,我知道这很可怕!

import java.util.ArrayList;

public class IceCream
{
    // stores ice cream flavours.
    private ArrayList<String> flavours;

    /**
     * Constructor for objects of class IceCream
     */
    public IceCream()
    {
        // initialise instance variables
        flavours = new ArrayList<String>();
    }

    /**
     * Method to add a flavour to the list.
     */
    public void newFlavour(String flavours)
    {
        flavours.add(flavours);        
    }
}

【问题讨论】:

  • 您可能不应该为代码中的所有内容使用名称 flavours

标签: java scope local-variables class-variables


【解决方案1】:

看代码:

public void newFlavour(String flavours)
{
    flavours.add(flavours);        
}

参数flavoursshadowing 你的字段flavours,所以编译器试图在String 中找到add 方法,而不是ArrayList。您可以明确地限定它(this.flavours.add(flavours)),但更改参数名称会更好。毕竟,您并没有添加多种口味 - 只是一种......所以您的参数名称应该反映这一点:

public void newFlavour(String flavour)
{
    flavours.add(flavour);
}

也可能将方法名称更改为addFlavour

【讨论】:

    【解决方案2】:

    您将 String 参数命名为等于属性的名称(风味),因此编译器尝试在 String 类中查找 add() 方法(该方法不可用)。修改如下代码:

    public void newFlavour(String flavours)
    {
        this.flavours.add(flavours);        
    }
    

    或使用不同的名称。

    【讨论】:

      猜你喜欢
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      相关资源
      最近更新 更多