zoukankan      html  css  js  c++  java
  • 函数对象

    函数对象
    * 一种将函数作为参数传递的独创方法 是注意到 在我们想传递的参数 即包含数据 也保包含方法,于是我们可以定义一个
    * 不包含数据 只 包含方法的类,并传递该类的一个实例,事实上,一个函数通过将其放在一个对象内部而被传递,这样的对象
    * 通常称为函数对象
    package javabean.newTest51;
    
    import com.sun.istack.internal.localization.NullLocalizable;
    import com.sun.xml.internal.bind.AnyTypeAdapter;
    import javabean.newTest51.javabean.CaseInsensitiveCompare;
    import javabean.newTest51.javabean.Circle;
    import javabean.newTest51.javabean.Shape;
    import javabean.newTest51.javabean.Square;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Comparator;
    import java.util.List;
    
    /**
     * 2018/5/1
     * 陈东
     * 函数对象
     */
    public class Test {
    
        public static <AnyType> boolean contains(AnyType []arr,AnyType x){
    
            return false;
        }
    
        public static double toTalArea(Collection<? extends Shape> shapes){
            int toTalArea = 0;
            for (Shape s:shapes
                 ) {
                if (s!=null){
                    toTalArea+=s.area();
                }
    
            }
            return toTalArea;
        }
        @org.junit.Test
         public void test(){
            Collection<Square> squares = new ArrayList<Square>();
            Square square1 = new Square(6.0,7.0);
            Square square2 = new Square(5,3);
            squares.add(square1);
            squares.add(square2);
            System.out.println(Test.toTalArea(squares));
         }
        /**
         * 函数对象
         * 一种将函数作为参数传递的独创方法 是注意到 在我们想传递的参数 即包含数据 也保包含方法,于是我们可以定义一个
         * 不包含数据 只 包含方法的类,并传递该类的一个实例,事实上,一个函数通过将其放在一个对象内部而被传递,这样的对象
         * 通常称为函数对象
         */
        public static <AnyType> AnyType findMax(List<AnyType> anyTypes, Comparator<? super AnyType> cmp){
            int maxindex = 0;
            for (int i=0;i<anyTypes.size();i++){
                if (cmp.compare(anyTypes.get(i),anyTypes.get(maxindex))>0){
                    maxindex = i;
                }
            }
             return anyTypes.get(maxindex);
    
        }
        @org.junit.Test
        public void testFun(){
             List<Shape> shapes = new ArrayList<>();
             Square square = new Square(7.0,8.0);
             shapes.add(square);
             Circle circle = new Circle(8.0);
             shapes.add(circle);
             System.out.println(Test.findMax(shapes,new CaseInsensitiveCompare()).toString());
        }
        @org.junit.Test
        public void testFUn() {
            List<Square> squares = new ArrayList<>();
            Square square = new Square(7.0, 8.0);
            Square square2 = new Square(8.0, 8.0);
            Square square3 = new Square(7.0, 9.0);
            squares.add(square);
            squares.add(square2);
            squares.add(square3);
            Comparator<? super Square> cmp = new CaseInsensitiveCompare();
            System.out.println(Test.findMax(squares,cmp).toString());
        }
    }
    

     涉及到的实体类

    package javabean.newTest51.javabean;
    
    import java.util.Comparator;
    
    public class CaseInsensitiveCompare implements Comparator<Shape> {
       @Override
        public int compare(Shape shape1,Shape shape2){
           if (shape2.area() < shape1.area()){
               return 1;
           }
           return 0;
       }
    }
    
    
    package javabean.newTest51.javabean;
    
    public class Circle extends Shape{
        private double circlelength;
    
        public double getCirclelength() {
            return circlelength;
        }
    
        public void setCirclelength(double circlelength) {
            this.circlelength = circlelength;
        }
        public Circle(Double d){
            this.circlelength = d;
        }
        @Override
        public Double  area(){
            return 3.14*2*circlelength;
        };
    
        @Override
        public String toString() {
            return "Cirle: banjing"+getCirclelength();
        }
    }
    
    
    package javabean.newTest51.javabean;
    
    public abstract class Shape {
        public  abstract Double area();
    
    }
    
    
    
    package javabean.newTest51.javabean;
    
    public class Square extends Shape {
        private double lenhth;
        private double hehth;
    
        public void setLenhth(double lenhth) {
            this.lenhth = lenhth;
        }
    
        public double getLenhth() {
            return lenhth;
        }
    
        public void setHehth(double hehth) {
            this.hehth = hehth;
        }
    
        public double getHehth() {
            return hehth;
        }
        @Override
        public String toString() {
            return "Squre: heth:"+getHehth()+"le:"+getLenhth();
        }
    
        public Square(double lenhth,double hehth){
            this.hehth =hehth;
            this.lenhth = lenhth;
        }
        @Override
        public Double area(){
            return hehth*lenhth;
        };
    
    }
    
  • 相关阅读:
    解决linux下svn update 产生Node remains in conflict的问题
    实现本地svn目录同步时,服务器的相应目录保持自动同步
    linux下搭建SVN
    linux下安装pip与pip安装
    CentOS7下将Python的版本升级为3.7
    Linux基础二:初识linux命令
    泛型数组 + 记录类型 + Json 之间的转换
    TDictionary字典 记录 的赋值。
    TDictionary字典 对象的释放。。。
    基于 Intraweb 和 JQuery 的开发套件
  • 原文地址:https://www.cnblogs.com/ChenD/p/8976299.html
Copyright © 2011-2022 走看看