当前位置: 首页 > 面试题库 >

使用List <>参数重载Java函数

南门嘉
2023-03-14
问题内容

我有2节课

public class Customer{
  ...
  public String getCustomerNumber();
  ...
}

public class Applicant{
   ....
   private Customer c;
   public Customer getCustomer(){ return c; }
   ...
}

当显示客户或申请人列表时,我需要一个函数,该函数可对列表进行迭代并使用CustomerNumber进行处理。

我试过重载该功能

public void processCustomerNumbers(List<Customer> custList)
...

public void processCustomerNumbers(List<Applicant> appList)
...

但是这些被看作是重复的方法…除了有2个不同名称的函数之外,还有一种不错的方法吗?


问题答案:

如果您使两个类都实现一个通用接口,

interface CustomerNumber {
    String getCustomerNumber();
}

public class Customer implements CustomerNumber {
  ...
  public String getCustomerNumber();
  ...
}

public class Applicant implements CustomerNumber {
   ....
   private Customer c;
   public Customer getCustomer() { return c; }
   public String getCustomerNumber() { return getCustomer().getCustomerNumber(); }
   ...
}

那么您也许可以只用一个方法就能做您想做的事情:

public void processCustomerNumbers(List<? extends CustomerNumber> appList) {
    for (Customer c: appList) {
        processCustomerNumber(c.getCustomerNumber());
    }
}


 类似资料:
  • 问题内容: 该代码无法编译,编译器说f含糊。但是我认为第二种方法可以解决什么问题? 问题答案: 这是因为无法确定该方法调用是应调用变量args还是应调用float和变量args。 Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。 在这种情况下,基本上将char扩展为浮动。 Java基元的扩展顺序为:

  • C# 现在已经在函数调用上支持命名参数了。这意味着名字形式的参数是你的类 public 接口的一部分。改变 public 参数的名字将破坏函数调用代码。这意味着很多时候要避免使用命名参数,或者避免改变 public 或 protected 方法的命名参数的名字。 当然,没有一个语言设计者增加的特性会增加你的难度。命名参数和默认参数防止了很多 API 的多而杂乱,特别是 Microsoft Offi

  • 问题内容: 覆盖和过载之间有什么区别? 问题答案: 重载:在编译时根据指定参数的数量和类型选择方法 签名 覆盖:在执行时根据目标对象的实际类型(与表达式的编译时类型相对)选择方法 实现 例如: 这两个调用都是 重载的 示例。有两种方法,称为,编译器确定要调用的签名。 第一次调用是 覆盖 的示例。编译器选择签名“ foo(int)”,但是在执行时,目标对象的类型确定要使用的实现应为in中的一个。

  • null 代码也可以在TypeScript游乐场上查看。

  • 问题内容: 假设我有以下重载函数 为什么要调用带有参数签名的方法?这里重载的优先顺序是什么? 问题答案: 在这种情况下,类层次结构中较低的类将具有优先权。换句话说,更具体的类类型,在这种情况下将是因为从技术上扩展了。 如果您有以下内容 然后,当您定义如下的重载方法时: 然后调用将调用第二个方法,因为它在类层次结构中较低。

  • 陈述 我想去 但是显然没有使用...因为它不是切肉刀,我想了解更多关于函数及其传递参数的方式。 所以我尝试附加一个使用map函数列表的所有元素。但在此之前,是一个方法,而不是一个方法。 最后一个映射函数返回TypeError: 我想知道是否可以将参数传递给使用的方法。感谢