首页 > 解决方案 > 尝试使用我自己的方法时找不到符号错误

问题描述

我有一个Time类,它有一个名为 lessThan 的比较方法

public boolean lessThan(Time t1, Time t2) {
    if (t1.getHours() > t2.getHours()) {
        return false;
    } else if (t1.getHours() == t2.getHours()) {
        if (t1.getMinutes() >= t2.getMinutes()) {
            return true;
        } else
            return true;
    } else
        return true;
}

我想在我的主类中使用这个方法来与传递给我的 Time 对象排序的 Time 对象进行比较。

public static void sortAppointments(ArrayList < Time > appointments) {
    Time val;
    for (int i = 0; i < appointments.size(); i++) {
        if (!lessThan(appointments.get(i), appointments.get(i + 1))) {
            val = appointments.get(i + 1);
            appointments.set(i + 1, appointments.get(i));
            appointments.set(i, val);
        }
    }
}

但是编译时出现找不到符号错误。我究竟做错了什么?如何在主类中使用我自己的方法?

标签: javaobjectmethods

解决方案


你写,

我有一个 Time 类,它有一个名为 lessThan 的比较方法

我想在我的主类中使用这个方法

,显然你试图用

            if( !lessThan( appointments.get( i ), appointments.get( i + 1 ) ) ) {

但是 的调用lessThan(),就像它在主类的静态方法中一样,将根据主类解析方法名称lessThan。您想要的方法不存在,而是在Time类中。

此外,您已经实现Time.lessThan(Time, Time)实例方法,因此需要在 的实例上调用Time它,但它似乎没有对该实例进行任何使用。Time如果它只接受一个参数,并评估调用它的实例是否小于参数,那么作为类的实例方法会更有意义。就目前而言,如果它是静态的,该方法会更有用。

可以解决此问题的最小更改集是

  1. 制作方法static

    // In class Time
    public static boolean lessThan( Time t1, Time t2 ) { // ...
    

  2. 在你的主类中调用它:

           if( !Time.lessThan( appointments.get( i ), appointments.get( i + 1 ) ) ) {
    

推荐阅读