美文网首页
接口的新特性

接口的新特性

作者: YNZXGWZM | 来源:发表于2018-08-02 17:44 被阅读0次
  • Java 8中允许接口中包含具有具体实现的方法,该方法称为 “默认方法”,默认方法使用 default 关键字修饰。


    image.png
  • 接口默认方法的”类优先”原则
    若一个接口中定义了一个默认方法,而另外一个父类或接口中 又定义了一个同名的方法时
     选择父类中的方法。如果一个父类提供了具体的实现,那么 接口中具有相同名称和参数的默认方法会被忽略。
     接口冲突。如果一个父接口提供一个默认方法,而另一个接 口也提供了一个具有相同名称和参数列表的方法(不管方法 是否是默认方法),那么必须覆盖该方法来解决冲突
image.png
package com.ymdd.galaxy.waybill.core.inter;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;

import com.ymdd.galaxy.base.api.vo.DepartmentVo;
import com.ymdd.galaxy.base.api.vo.DistrictVo;
import com.ymdd.galaxy.waybill.api.vo.WaybillApiDTO;
import com.ymdd.galaxy.waybill.entity.rec.waybill.model.ReceiveAddress;
import com.ymdd.galaxy.waybill.entity.rec.waybill.model.WaybillServiceFeeVo;

import jersey.repackaged.com.google.common.collect.Maps;


/***
 * 
 * @author lzm
 *
 *运单装饰接口,用来费用计算、网点转义
 *
 */
public interface CascadeWaybillInterface {

    
    /**
     * 组装fee进入waybill
     * */
    default void cascadeWaybillFee(WaybillApiDTO dto, WaybillServiceFeeVo fee){
        
        BeanUtils.copyProperties(fee, dto);
        
        //BeanCopier copier = BeanCopierUtils.getBeanCopier(WaybillApiDTO.class, WaybillServiceFeeVo.class);
        
        //copier.copy(fee, dto, null);
        
    }
    
    
    /**
     * 组装address进入waybill
     * */
    default void cascadeWaybillAddress(WaybillApiDTO dto, ReceiveAddress address){
        
        BeanUtils.copyProperties(address, dto);
        if (StringUtils.isNotBlank(address.getConsigneeAddressCode())) {
            dto.setConsigneeAddressCode(address.getConsigneeAddressCode());
        }
        
        if (StringUtils.isNotBlank(address.getSendAddressCode())) {
            dto.setSendAddressCode(address.getSendAddressCode());
        }
        
    }
    
    
    /**
     * 批量组装fee进入waybill
     * */
    default void batchCascadeWaybillFee(List<WaybillApiDTO> dtoList, List<WaybillServiceFeeVo> feeList){
        
        Map<Long, WaybillServiceFeeVo> map =   feeList.stream()
                .collect(Collectors.toMap(WaybillServiceFeeVo::getWaybillNo, p -> p));
        
        if(!map.isEmpty()){
            
            for(WaybillApiDTO dto : dtoList){
                
                WaybillServiceFeeVo fee = map.get(dto.getWaybillNo());
                
                if(null != fee){
                    
                    cascadeWaybillFee(dto, fee);
                }
                
            }
            
        }
        
    }
    
     
    
    /**
     * 批量组装address进入waybill
     * */
//此接口将来会在实现类中调用
    default void batchCascadeWaybillAddress(List<WaybillApiDTO> dtoList, List<ReceiveAddress> addressList){
        
        Map<Long, ReceiveAddress> map = addressList.stream()
                .collect(Collectors.toMap(ReceiveAddress::getWaybillNo, p -> p, (key1, key2) -> key1));
        
        if(!map.isEmpty()){
            
            for(WaybillApiDTO dto : dtoList){
                
                ReceiveAddress address = map.get(dto.getWaybillNo());
                
                if(null != address){
                    
                    cascadeWaybillAddress(dto, address);
                }
                
            }
            
        }
        
    }
    
    default String[] getSortDirection(String sortDirection) {
        if (StringUtils.isNotBlank(sortDirection)) {
            return sortDirection.split(",");
        }
        return null;
    }
    
    default String[] getSortName(String sortName) {
        if (StringUtils.isNotBlank(sortName)) {
            return sortName.split(",");
        }
        return null;
    }
    
    
    /**
     * 
     * @author lzm
     * 封装查询行政区域
     * */
    default HashMap<Integer,String> createDistrict(DistrictVo[] arr){
        
        HashMap<Integer,String> map = Maps.newHashMap();
        
        if(null != arr){
            
             for(DistrictVo v : arr){
                 
                 map.put(v.getCode(), v.getName());
                 
             }
             
        }
        
        return map;
        
    }
    
    
    /**
     * 
     * @author lzm
     * 封装查询网点名称
     * */
    default HashMap<String,String> createDept(DepartmentVo[] arr){
        
        HashMap<String,String> map = Maps.newHashMap();
        
        if(null != arr){
             
             for(DepartmentVo v : arr){
                 
                 map.put(v.getDeptCode(), v.getOutDeptName());
                 
             }
             
        }
        
        return map;
        
    }
    
}
image.png image.png

相关文章

  • 接口的新特性

    Java 8中允许接口中包含具有具体实现的方法,该方法称为 “默认方法”,默认方法使用 default 关键字修饰...

  • java 各版本新特性介绍

    java8 新特性 Java8 主要包括的新特性有: 函数式接口如果一个接口只有一个抽象方法,那么该接口就成为一个...

  • 1.Java8你需要了解的

    一、Java8新增了哪些新特性: 新特性Java8 新增了非常多的特性,我们主要讨论以下几个: 1、接口默认方法:...

  • Java新特性

    Java5新特性 可变参数 foreach循环 静态导入 引入: 静态导入: Java8新特性 接口定义的增强(可...

  • @FunctionalInterface函数式接口

    JDK8新特性:函数式接口@FunctionalInterface的使用说明

  • JDK8 快速指南

    翻译自 java8-tutorial 新特性 Default Methods for Interfaces(接口的...

  • 新特性 函数式接口

    概述 有且只有一个抽象方法的接口,称之为函数式接口,当然接口中可以包含其它的方法(默认,静态,私有) 定义一个函数...

  • java8新特性介绍

    目录结构 介绍 Java语言的新特性2.1 Lambdas表达式与Functional接口2.2 接口的默认与静态...

  • FunctionalInterface函数式接口

    关于jdk8的新特性函数式接口示例以及描述 代码示例

  • [Java基础] Jdk8新特性

    [Java基础] Jdk8新特性 1. 语言的新特性 1.1 接口里面可以有具体的实现逻辑。 通过使用关键字 de...

网友评论

      本文标题:接口的新特性

      本文链接:https://www.haomeiwen.com/subject/neusvftx.html