【问题标题】:Incompatible return type of phone number电话号码的返回类型不兼容
【发布时间】:2014-06-05 22:18:30
【问题描述】:

我应该如何更改 getPhoneNumber 中的代码才能正常工作,知道吗? 这就是我最终应该得到的 +38(050)123-45-67。 38 是国家代码,这是电话号码 501234567,但您必须在号码开头输入 0 才能获得 10 个号码,如这里 (>0

public String getPhoneNumber()
        {
           return String.format("+%d(%2$s)%3$s-%4$s-%5$s", 38,
                    String.format("%010d", 501234567).substring(0, 3),
                    String.format("%010d", 501234567).substring(3, 6),
                    String.format("%010d", 501234567).substring(6, 8),
                    String.format("%010d", 501234567).substring(8));

        }

完整的代码。

public class Solution {
    public static Map<String,String> countries = new HashMap<String,String>();

    public static class IncomeDataAdapter implements Customer, Contact, IncomeData
    {
        IncomeData incomeData;

        public IncomeDataAdapter(IncomeData incomeData)
        {
            countries.put("UA","Ukraine");
            countries.put("RU", "Russia");
            countries.put("CA", "Canada");
            this.incomeData = incomeData;
        }

        @Override
        public String getName()
        {
            return incomeData.getContactLastName()+ incomeData.getContactFirstName();
        }

        @Override
        public String getPhoneNumber()
        {
           return String.format("+%d(%2$s)%3$s-%4$s-%5$s", 38,
                    String.format("%010d", 501234567).substring(0, 3),
                    String.format("%010d", 501234567).substring(3, 6),
                    String.format("%010d", 501234567).substring(6, 8),
                    String.format("%010d", 501234567).substring(8));

        }




        @Override
        public String getCompanyName()
        {
            return incomeData.getCompany();
        }

        @Override
        public String getCountryName()
        {
            return countries.get(incomeData.getCountryCode());
        }

        @Override
        public String getContactFirstName()
        {
            return "Ivan";
        }

        public IncomeData getIncomeData()
        {
            return incomeData;
        }

        @Override
        public String getCountryCode()
        {
            return "UA";
        }



        @Override
        public String getCompany()
        {
            return "JavaRush Ltd.";
        }

        @Override
        public String getContactLastName()
        {
            return "Ivanov";
        }

        @Override
        public int getCountryPhoneCode()
        {
            return 38;
        }
    }

    public static interface IncomeData {
        String getCountryCode();        
        String getCompany();            
        String getContactFirstName();  
        String getContactLastName();    
        int getCountryPhoneCode();     
        void getPhoneNumber();          
    }

    public static interface Customer {
        String getCompanyName();        
        String getCountryName();       
    }

    public static interface Contact {
        String getName();               
        String getPhoneNumber();        
    }
}

【问题讨论】:

  • 这段代码很混乱。您是否考虑过通过声明变量来排除所有重复项?
  • 我刚刚开始学习如何使用适配器
  • @Sotirios Delimanolis,它出现在 getPhoneNumber
  • 没有错误。 xDD方法有问题,我不知道该怎么办
  • @Sotirios Delimanolis,“尝试使用不兼容的类型”

标签: java regex return substring


【解决方案1】:

您的IncomeDataContact 接口都有getPhoneNumber 方法。一个声明返回类型为void,而另一个声明返回类型为String

您正在尝试使用您的IncomeDataAdapter 类来实现这两个接口。通过声明被覆盖的方法是

@Override
public String getPhoneNumber()
{

不满足IncomeData的合约。如果您将其声明为

@Override
public void getPhoneNumber()
{

它不能满足Contact 接口。基本上,您不能拥有具有相同定义(名称和参数列表)但返回类型不同的方法。

更改您的IncomeData 接口以声明具有String 返回类型的getPhoneNumber 方法。

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2014-08-29
    • 2016-05-28
    相关资源
    最近更新 更多