我应该如何更改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();
}
}
答案 0 :(得分:0)
您的IncomeData
和Contact
接口都有getPhoneNumber
方法。一个声明返回类型void
,而另一个声明返回类型String
。
您正在尝试使用IncomeDataAdapter
类实现这两个接口。通过声明覆盖方法是
@Override
public String getPhoneNumber()
{
它不符合IncomeData
的合同。如果您将其声明为
@Override
public void getPhoneNumber()
{
它不会满足Contact
接口。基本上,您不能使用具有不同返回类型的相同定义(名称和参数列表)的方法。
更改您的IncomeData
界面,使用getPhoneNumber
返回类型声明String
方法。