0

使用 java 的 Calendar 类时出现错误,错误消息中有术语-Xdiags:verbos

代码:

public class CalendarClass{
    public static void main(String args[]){
       Calendar cal=Calendar.getInstance();
       System.out.println(cal.get(Calendar.DATE+ " / "+ Calendar.MONTH + " / " + Calendar.YEAR )); 
    }
    
} 

输出:

CalendarClass.java:5:错误:不兼容的类型:字符串无法转换为 int System.out.println(cal.get(Calendar.DATE+ " / "+ Calendar.MONTH + " / " + Calendar.YEAR )); ^ 注意:一些消息已被简化;使用-Xdiags:verbose重新编译以获得完整输出

那么我应该如何解决这个问题呢?

4

2 回答 2

0

主要问题已经回答了。Calendar.get需要一个as 参数,但您的代码从字符串 concatenationint传递一个。StringCalendar.DATE+ " / " + Calendar.MONTH + " / " + Calendar.YEAR

回答关于笔记的问题

Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output

它告诉您,当您将额外选项添加-Xdiags:verbosejavac. 在具体示例中:

没有-Xdiags:verbose

CalendarClass.java:N: error: incompatible types: String cannot be converted to int
       System.out.println(cal.get(Calendar.DATE+ " / " + Calendar.MONTH + " / " + Calendar.YEAR ));
                                                                                ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error

该消息指向+字符串连接中的最后一个。

-Xdiags:verbose

CalendarClass.java:N: error: method get in class Calendar cannot be applied to given types;
       System.out.println(cal.get(Calendar.DATE+ " / " + Calendar.MONTH + " / " + Calendar.YEAR ));
                             ^
  required: int
  found:    String
  reason: argument mismatch; String cannot be converted to int
1 error

消息指向方法cal.get

对我来说,后者更有用。这就是为什么我总是有那个额外的选项集。

如何设置编译器选项?

这取决于您的编译方式。直接使用javac它就像将编译器选项放在javac命令行中一样简单:

javac -encoding UTF-8 -Xlint:deprecation -Xdiags:verbose -cp .;./depJars/* CalendarClass.java

使用 IDE 请查看 IDE 的文档,了解如何将额外选项设置为javac.

于 2022-01-30T07:07:46.737 回答
0

你不能为Calendar.get(int)(它需要一个int,而不是一个String)创建一个新的语法。改变

System.out.println(cal.get(Calendar.DATE+ " / "
        + Calendar.MONTH + " / " + Calendar.YEAR ));

System.out.println(cal.get(Calendar.DAY_OF_MONTH) 
        + " / " + (cal.get(Calendar.MONTH) + 1) + " / "
        + cal.get(Calendar.YEAR));

但我强烈建议你用更现代的java.time等价物替换所有这些。喜欢,

System.out.println(DateTimeFormatter.ofPattern("dd / M / yyyy")
        .format(LocalDate.now()));

两者都输出(因为今天是 2022 年 1 月 30 日)

30 / 1 / 2022
于 2022-01-30T06:27:48.583 回答