【问题标题】:Java: method return type as array errorJava:方法返回类型为数组错误
【发布时间】:2017-04-07 05:21:25
【问题描述】:
public ProvinceTerritory[] getProvinceWhoseNameContains(String substring){
    String[] names;
    names = new String[13];
    int j=0;

    for(ProvinceTerritory ptt:provinces){
        if(ptt.getName().contains(substring)){
            String singleName=ptt.getName();
            names[j]= singleName;
            j++;
        }
    }
    return names;  \\this is where the error points to
}

即使ProvinceTerritorynames 都是数据类型arrays,为什么返回类型会出错?
"incompatible types:java.lang.String[] can not be converted to ProvinceTerritory[]"

【问题讨论】:

  • 您的返回类型不是字符串数组,它应该是 public String[] getProvinceWhoseNameContains(String substring)。 ProvinceTerritory[] 不是字符串数组。
  • 所以,如果我想保持方法签名的原样,例如:public ProvinceTerritory[] getProvinceWhoseNameContains(String substring){} 那么我应该对方法的主体进行哪些更改?跨度>

标签: java arrays type-conversion


【解决方案1】:

Java 是一种strongly typed 语言。

您不能指定返回值ProvinceTerritory[],然后改为返回 String[]。它们是两种不同的类型。

如果您有兴趣,可以从以下主题中了解有关该主题的更多信息:

What are the key aspects of a strongly typed language?

What is the difference between a strongly typed language and a statically typed language?

【讨论】:

    【解决方案2】:

    它们都是数组。但它们是不同类型的数组。所以你不能将String[] 传递给ProvinceTeritorry[]

    更改方法的返回类型

    public String[] getProvinceWhoseNameContains
    

    更新

    如果您想返回Provinceteritorry[],那么您可以执行以下操作

    public ProvinceTerritory[] getProvinceWhoseNameContains(String substring){
        ProvinceTerritory[] names = new ProvinceTerritory[13];
        int j=0;
    
        for(ProvinceTerritory ptt:provinces){
            if(ptt.getName().contains(substring)){
                names[j]= ptt;
                j++;
            }
        }
        return names;  
    }
    

    【讨论】:

    • 如果我不想更改方法签名并将其保留为 ProvinceTeritory[],那么我该如何以这种方式返回名称?
    • 然后创建一个 Provisioceteritorry[] 而不是 String[] 并返回 .. 在你的循环中生成这个数组而不是获取名称
    • 好的,我将其更改为以下内容: public ProvinceTerritory[] getProvinceWhoseNameContains(String substring){ ProvinceTerritory[] names;名称 = 新省地区[13]; for(ProvinceTerritory ptt:provinces){ if(ptt.getName().contains(substring)){ System.out.println(names.); } } 返回名称; } 而这个正在运行,但它并没有给我正确的 povinces 的名称,它打印出像“[LProvinceTerritory;@13fbf44”你知道为什么吗?
    • 对不起,我不知道如何在 cmets 中添加代码。
    • 是的,公共 ProvinceTerritory[] getProvinceWhoseNameContains(String substring){ ProvinceTerritory[] 名称;名称 = 新省地区[13]; for(ProvinceTerritory ptt:provinces){ if(ptt.getName().contains(substring)){ System.out.println(names.); } } 返回名称;并且这个正在运行,但它并没有给我正确的 povinces 的名称,它打印为“[LProvinceTerritory;@13fbf44”
    【解决方案3】:

    string[] 和 ProvinceTerritory[] 不同,请确定需要返回哪个类型的函数。 如果需要 ProvinceTerritory 则创建 ProvinceTerritory 对象数组并返回 ProvinceTerritory[] 否则将您的函数返回类型更改为 string[]。

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      ProvinceTerritory 和 String 类型不同

      两者都来自完全不同的层次结构。
      所以, 将返回类型更改为 String[] 或创建 "names" 一个 ProvinceTerritory 数组。

      【讨论】:

        猜你喜欢
        • 2014-10-27
        • 2018-10-19
        • 2018-09-26
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        相关资源
        最近更新 更多