不兼容的电话号码返回类型

时间:2014-04-21 19:24:10

标签: java regex return substring

我应该如何更改getPhoneNumber中的代码才能正常工作? 这就是我最终应该得到的+38(050)123-45-67。 38是国家代码,这是电话号码501234567,但你必须在数字的开头加零才能获得10个这样的数字(> 0< 50)

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();        
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

@Override
public String getPhoneNumber()
{

它不符合IncomeData的合同。如果您将其声明为

@Override
public void getPhoneNumber()
{

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

更改您的IncomeData界面,使用getPhoneNumber返回类型声明String方法。