【问题标题】:Cannot find symbol for method format(DateTimeFormatter)?找不到方法格式(DateTimeFormatter)的符号?
【发布时间】:2020-11-09 05:32:39
【问题描述】:

我遇到了问题,我绝对无法解决它。我对 Java(或任何语言,就此而言)缺乏经验,如果这是一个愚蠢的问题,请原谅。

据我所知,java.time.format.DateTimeFormatter 的 format() 方法并没有像我想象的那样工作。我一直收到以下错误消息 (CLI):

Watch.java:609: error: cannot find symbol
                String dateTimeDisplay = dateTime.format(dateTimeFormat);
                                                 ^
  symbol:   method format(DateTimeFormatter)
  location: variable dateTime of type Object
1 error

以下是我认为相关的代码:

import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class Watch {
    
    protected int hour, hourTens, hourOnes, minute, minuteTens, minuteOnes, amPM;
    
    public void watchMethod(String userInput) { 
        
        Object dateTime; // Create reference to object called dateTime
    
        switch (userInput) {
            case "1":
            ZonedDateTime dateTimeHere = ZonedDateTime.now();
            hour = dateTimeHere.getHour();
            minute = dateTimeHere.getMinute();
            // amPM is used exclusively to display AM/PM or a heart (see lines 580 to 567).
            amPM = dateTimeHere.getHour();
            dateTime = dateTimeHere;
            break;
            
            case "2":
            ZonedDateTime dateTimeThere = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
            hour = dateTimeThere.getHour();
            minute = dateTimeThere.getMinute();
            // amPM is used exclusively to display AM/PM or a heart (see lines 560 to 567).
            amPM = dateTimeThere.getHour();
            dateTime = dateTimeThere;
            break; 
            
            case "3":
            hour = -1;
            minute = -1;
            break;
        }

        // There is some code that prints things to console depending on the hour, minute, and amPM variables.
        // I don't think this is relevant, but that's what's here.

        // The following code prints out the actual date and time from a ZonedDateTime object.
        DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("hh:mm a 'on' EEEE, MMMM dd, yyyy");
        String dateTimeDisplay = dateTime.format(dateTimeFormat); // ERROR
        System.out.print("\nIt is currently " + dateTimeDisplay + "\n");
    }
}

这是一门课。

我已检查我的导入是否正确,并且任何地方都没有拼写错误!这是与我的问题相关的其他问题让我相信是问题所在,但似乎并非如此。

我也不太熟悉使用Object 作为引用类型,所以如果这可能是导致问题的原因,我并不感到惊讶。这是我能想到的将dateTimeHere/dateTimeThere 打破开关块的所有方法。

无论如何,如果我得到任何帮助,我将不胜感激。

快速编辑:我还认为如果没有合适的 dateTime 对象(即案例“3”),这也会导致错误。我简单地添加了一个if/else 语句来解决这个问题,在“3”的情况下使用一些代码表示 dateTime 为空,但这绝对没有任何作用。不过,请告诉我是否应该重新添加它。

编辑:感谢@MarsAtomic 的评论,我看到这篇文章可以使用另一个通读。我的问题是,在我的代码末尾,我想打印出 switch 语句检索到的 ZonedDateTime 数据,无论是来自用户的计算机位置还是“巴黎/欧洲”。最终,“Paris/Europe”字符串(理想情况下)将具有来自子类的一些用户输入(就像 userInput 的情况一样,但该特定字符串仅用于选择已经显示的 3 个案例之一)。

【问题讨论】:

  • 字段 dateTime 是 Object 类型。对象没有 .format() 方法。如果要访问 ZonedDateTime 的格式方法,则必须将 dateTime 声明为 ZonedDateTime(或将其转换为 ZonedDateTime)。真正的问题是,是什么让您认为您应该首先将 dateTime 声明为 Object?
  • 您好,感谢您这么快就来到这里!我的问题是,最初,代码String dateTimeDisplay = dateTime.format(dateTimeFormat);String dateTimeDisplay = dateTimeHere.format(dateTimeFormat);,并且我不断收到 dateTimeHere 的缺少符号错误。所以我创建了一个新的 dateTime 对象,并将 dateTimeHere 和 dateTimeThere 设置为相等,以解决范围问题。我想我只是认为ObjectString 一样——愚蠢的错误。
  • 没关系,但现在是熟悉X Y Problem 的好时机。当您不解决问题的直接原因以解决症状时,您确实可以使问题复杂化。你为什么不首先描述你想要做的事情——我不愿意在这一点上提供一个不能解决根本问题的解决方案。
  • @MarsAtomic,我的错。我刚刚更新了帖子,我希望现在适合。
  • 您将面临的下一个问题是在某些情况下dateTime 不会被任何显式值初始化。请注意,您仅在 "1""2" 的情况下对其进行初始化,但如果 "3"userInput 将包含任何其他值(如 "dog")呢?

标签: java compiler-errors cannot-find-symbol


【解决方案1】:

您可能打算将dateTime 声明为ZonedDateTime,因为Object 的定义不包括format 方法。

修改后的代码:

ZonedDateTime dateTime = null; // Create reference to object called dateTime
//...
DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("hh:mm a 'on' EEEE, MMMM dd, yyyy");
if (dateTime != null) {
    String dateTimeDisplay = dateTime.format(dateTimeFormat);
    System.out.print("\nIt is currently " + dateTimeDisplay + "\n");
}

【讨论】:

  • 呸,真是个愚蠢的错误。是的,我在想 Object 出于某种原因像 String 一样工作,然后我也认为它像没有方法的原始数据类型一样工作!谢谢你的帮助,我现在应该可以走了。 :)
猜你喜欢
  • 2015-01-19
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多