当前位置: 首页 > 知识库问答 >
问题:

仅在一个方法中重构函数重载方法

乔伯寅
2023-03-14
    public boolean isHorizontalOrVertical(Point firstPoint, Point secondPoint) {
        return firstPoint.getFirstComponent() == secondPoint.getFirstComponent()
                || firstPoint.getSecondComponent() == secondPoint.getSecondComponent();
    }

    public boolean isHorizontalOrVertical(List<Point> points) {
        if (points == null || points.size() < 2) {
            throw new IllegalArgumentException("invalid number of points");
        }
        Point start = points.get(0);
        return points.stream()
                .allMatch(p -> isHorizontalOrVertical(start, p));
    }

该方法需要检查两个或三个点是否相互垂直/水平。在三个点的情况下,它只需要检查最后两个点是否与起始点水平/垂直。

有人知道我如何把所有的东西都放到一个方法里吗?

共有1个答案

冯飞鹏
2023-03-14

首先,也是最重要的,我必须注意到这样一个事实:至少对我来说,计算两个实体是水平的还是垂直的,并且这些实体是点的方法是没有意义的。两个点怎么能是水平的还是垂直的?

克服上述问题,您可以创建一个计算两点是水平还是垂直的单一方法。

更改名称ishorizontalorvertice,因为它是多余的。更好的名字是isHorizontal或isvertical。该方法将返回一个布尔值,因此如果isHorizontal返回false,那么它是垂直的,反之亦然。也许一个更好的名字可以是areTwoPointsHorizontal,但我甚至很难写出来,因为它传达了错误的信息,但请随意选择你自己的名字。

    public boolean isHorizontal(Point first, Point second){
        boolean sameFirstComponents = firstPoint.getFirstComponent() == 
                secondPoint.getFirstComponent();
        boolean sameSecondComponents = firstPoint.getSecondComponent() == 
                secondPoint.getSecondComponent();          
        return sameFirstComponents || sameSecondComponents;
    }
   public boolean isHorizontal(List<Point> points){
        boolean allPointsHorizontal = true;
        for (int i=0; i<points.size(); i++) {
            
            boolean nextPointExists = i<points.size() - 1;
            if (nextPointExists) {
                Point current = points.get(i);
                Point next = points.get(i+1);
                allPointsHorizontal = allPointsHorizontal && isHorizontal(current,next);

                if (!allPointsHorizontal)
                    return false;  
            }
        }
        
        return allPointsHorizontal;
    }
 类似资料:
  • 问题内容: 是否可以使用Golang以类似的方式工作,例如函数重载或C#中的可选参数?还是另一种方式? 问题答案: 直接支持函数重载和可选参数。您可以解决它们,建立自己的参数结构。我的意思是这样(未经测试,可能无法使用…)编辑:现在已测试…

  • 本文向大家介绍C ++中的构造方法重载,包括了C ++中的构造方法重载的使用技巧和注意事项,需要的朋友参考一下 众所周知,函数重载是面向对象语言的核心功能之一。我们可以使用相同的功能名称;其参数集不同。在这里,我们将看到如何重载C ++类的构造函数。构造函数重载有几个重要概念。 重载的构造函数必须具有相同的名称和不同数量的参数 根据传递的参数的数量和类型来调用构造函数。 我们在创建对象时必须传递参

  • 本文向大家介绍C#中的构造方法重载,包括了C#中的构造方法重载的使用技巧和注意事项,需要的朋友参考一下 如果在同一个类中定义了多个具有相同名称的构造函数,则如果每个构造函数的参数不同,则将它们称为重载。 让我们看一个示例,以学习如何在C#中使用构造函数重载。 在示例中,我们有两个主题和一个“学生姓名”的字符串声明。 我们正在显示三个不同学科的学生的成绩。在我们的示例中,为显示构造函数重载,仅为学生

  • 重载子类中重写的方法,我是重载父方法还是重载子类方法? 我大体上理解什么是超载和超驰。 重载-同一方法在同一个类中有不同的参数和可能的返回类型。 重写-子类中的方法签名与父类中的方法签名相同,但实现不同。 方法B.a(INTX)是重载a.a还是重载B.a?

  • 我正在尝试使用Typescript重载一个方法。Java或C#中通常的重载方式似乎不适用于Typescript。我不能这样做: 我四处搜索,发现我必须这样做: 对我来说,这个方法似乎很不整洁,很难维护,因为我把所有东西都乱七八糟地放在一个方法中,并使用if/ther语句来划分逻辑。 有没有更好的方法可以在Typescript中进行方法重载?

  • 我在超类中有一个重载方法的基本继承情况。 下面的类扩展了上面的类: main方法只是创建一个对象(静态和动态类型)并调用: 最后打印出来 看了这个,我想既然对象的静态和动态类型都是,它会调用Person中的重载方法,该方法将作为参数。由于我显然错了,我打开了一个调试器,假设类中的getWorkDetail(this)行中对“this”的引用一定已经变成了它的超级类。然而,这不是我发现的。 显然,在