公共类之外的公共方法

时间:2018-04-17 20:30:46

标签: java class arraylist methods

目标是编写代码以确定与(24,5)最接近的x,y坐标。使用具有2个实例变量的公共类PointXY。然后是类外的一个公共方法,它返回最接近(24,5)的点。我知道我做得不对,因为PointXY类型的ArrayList令我感到困惑。提前谢谢你的帮助。

public class CreationDialog : MainPage, IModal
{
    public CreationDialog()
    {
        _Modal = Modal.Get(WindowLocator);  //Don't declare new variable
    }

    IModal _Modal { get; set; }
}

2 个答案:

答案 0 :(得分:1)

您正在使用Java。 在Java中 只有课程; 课堂外没有任何东西。

如果您有要共享的代码,并且您不想实例化某个类, 使用静态公共方法。 这是一个例子:

public class KapowThing
{
    public static void kapow()
    {
        System.out.println("Kapow");
    }
}

public class MainThing
{
    public static void main(final String[] arguments)
    {
        KapowThing.kapow();
    }
}

修改 您可以在非公共类中使用公共方法, 但你可能不希望这样,因为非公共类会有 在宣告类之外的有限(可能没有)可见性。

如果课程访问受限, 拥有一个具有更大访问权限的方法很少有意义(如私有类中的公共方法)。 我唯一能做的就是如果我有一个接口和一堆任务特定的工厂,它们都创建了一个实现接口的私有类。 我甚至不确定这可以做到。

以下是一些代码:

package learn.access;

public interface Thingy
{
    public void sayHello();
}


package learn.access

import learn.access.p1.MakeP1Thingy;

public class Main
{
    public static void main(String[] args)
    {
        MakeP1Thingy.makeThingy().sayHello();
    }
}


package learn.access.p1;

import learn.access.Thingy;

public class MakeP1Thingy
{
    public static Thingy makeThingy()
    {
        return new p1Thingy();
    }
}

package learn.access.p1;

import learn.access.Thingy;

// package access class.
class p1Thingy implements Thingy
{
    @Override
    public void sayHello()
    {
        System.out.println("p1 hi");
    }
}

答案 1 :(得分:0)

这是一种可行的方法。在PointXY类中添加一个方法,以查找到其他点的距离。

public class PointXY {
    private int x;
    private int y;

    public PointXY(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public double distanceTo(PointXY other) {
        return Math.hypot(x - other.x, y - other.y);
    }
}

然后,在其他课程的代码中,您将能够遍历Collection<PointXY>,寻找与指定的PointXY最近的PointXY。您必须跟踪到目前为止找到的最近点,以及到最近点的距离。

public PointXY closestTo(PointXY target, Collection<PointXY> toChooseFrom) {
    double leastDistanceSoFar = 0;
    PointXY closestPointSoFar = null;
    for (PointXY aPoint : toChooseFrom) {
        double thisDistance = target.distanceTo(aPoint);
        if (closestPointSoFar == null ||  thisDistance < leastDistanceSoFar) {
            closestPointSoFar = aPoint;
            leastDistanceSoFar = thisDistance;
        }
    }

    return closestPointSoFar;
}