我必须上课public class Consumer{private String name;private int salary;public String getName() { return name;}public void setName(String name) { this.name = name;}public int getSalary() { return salary;}public void setSalary(int salary) { this.salary = salary;}}接下来public class Donor {private String name;private int amount;private String location;public String getName() { return name;}public void setName(String name) { this.name = name;}public int getAmount() { return amount;}public void setAmount(int amount) { this.amount = amount;}}现在我有另一个包含方法 method1() 的类public class GenericClass<T> { public void method1(List<T> list){ Iterator i = list.iterator(); while (i.hasNext()){ } }}我的主要方法是public class MainMethod { public static void main(String[] args) { List<Donor> d = new ArrayList<>(); Donor donor = new Donor(); donor.setAmount(500); donor.setName("bill"); Donor donor1 = new Donor(); donor.setAmount(1250); donor.setName("linda"); d.add(donor); d.add(donor1); GenericClass genericClass = new GenericClass(); genericClass.method1(d); }}我想让这个 method1() 动态化并返回一个动态结果。所以如果我发送消费者名单,那么它应该返回我所有工资的总和,如果我发送捐赠者的名单,那么它应该向我发送捐赠的金额?如何做到这一点?
1 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
首先,您可能不会将类GenericClass设为泛型,而是将方法设为泛型method1()。
然后你可以提供一个ToIntFunction<T>接受一个类型的对象T并返回一个int值的。因此,您的方法可能如下所示(Java8 代码):
public <T> int method1(List<T> list, ToIntFunction<T> transformation){
return list.stream().collect(Collectors.summingInt(transformation));
}
然后你会像这样调用这个方法:
int sumSalaries = method1(consumers, Consumer::getSalary);
int sumDonations = method1(donors, Donor::getAmount);
Java8 之前的代码也是可能的,但它会大一点(您需要提供ToIntFunction该接口的实现和稍大的方法体)。
或者,您可以使用两个类都实现的接口,但这需要您使用通用方法名称(例如getAmount()或getIntValue()等)
添加回答
举报
0/150
提交
取消