如何解决尝试使用 Map< Class, Function<T,R>> 作为 java 8 中 instanceOf 的替代品,无法放入地图
我正在寻找在 java 8 中使用 instance of 的替代方法,因为我想根据输入对象的类型调用不同的类。我在 dzone (https://dzone.com/articles/using-instanceof-and-alternatives-within-java ) 上遇到了 Jhon Vester 的解决方案,建议我可以使用 Map
现在根据我在使用 Function
(类型 T 的参数 x) -> 类型 R 的返回值并给出应用抽象方法应该做什么的定义
在我的用例中,抽象方法的这个定义很长,它有很多业务逻辑,我想检查它并在该方法中调用数据库。所以我在另一个类(服务层,因为它是 API 的一部分)中编写这个方法。当我尝试将其放入地图时,它不起作用,地图大小仍为 0。
我试图在下面的代码片段中简化我的问题: 火车.class
public class Train {
public Integer getCostPerPassenger(DataTrain dataTrain){
return dataTrain.getPriceTicket()/ dataTrain.getNoOfSeats();
}
}
DataTrain.class
public class DataTrain {
int priceTicket;
int noOfSeats;
public int getPriceTicket() {
return priceTicket;
}
public void setPriceTicket(int priceTicket) {
this.priceTicket = priceTicket;
}
public int getNoOfSeats() {
return noOfSeats;
}
public void setNoOfSeats(int noOfSeats) {
this.noOfSeats = noOfSeats;
}
}
进程类
public class Process {
Train train = new Train();
private HashMap<Class,Function<DataTrain,Integer>> classFunctionHashMap = new HashMap<>();
public Integer getData(){
DataTrain dataTrain = new DataTrain();
dataTrain.setNoOfSeats(100);
dataTrain.setPriceTicket(50);
createMap();
return classFunctionHashMap.get(Train.class).apply(dataTrain);
}
public HashMap<Class,Integer>> createMap(){
classFunctionHashMap.put(Train.class,(DataTrain data) -> train.getCostPerPassenger(data));
return classFunctionHashMap;
}
}
在 classFunctionHashMap.put 中按预期工作,即使代码正在运行,地图的大小仍然为 0。
我想知道如何让这个 Map
编辑: 上面的代码运行良好,问题是运行 Junit 的代码。
我已经使用 .getClass().getSimpleName() 实现了另一种方法来实现相同的目标。
if(train.getClass().getSimpleName().equals("Train")){ //call whatever method you want to }
我的目标是能够识别类。
解决方法
getCostPerPassenger() 方法中的计算是基于整数的除法。您的示例计算 50/100,在整数数学中为 0。
我还建议您将其设为 Train 类中的静态方法:
public class Train {
public static Integer getCostPerPassenger(DataTrain dataTrain) {
int result = dataTrain.getPriceTicket() / dataTrain.getNoOfSeats();
return result;
}
}
然后您可以从类 Process 中删除 Train 实例并将方法 createMap() 中的代码更改为:
public HashMap<Class,Function<DataTrain,Integer>> createMap(){
classFunctionHashMap.put(Train.class,data -> Train.getCostPerPassenger(data));
return classFunctionHashMap;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。