Java中LocalTime类型传参int/string不匹配报错解决方法
问题原因
LocalTime是Java 8引入的java.time包下的时间类,属于引用类型,Java不会自动把int、String、char类型的值直接转换为LocalTime实例,你之前的几种写法错误点很明确:
10:30不属于Java支持的任何合法字面量写法,编译器根本无法识别- 直接传入
10、6是int整型值,和构造方法要求的LocalTime类型不匹配 - 单引号包裹的
'10:30'本身就是非法的char类型写法——char类型只能存储单个字符 - 双引号包裹的
"10:30"是String字符串类型,不存在String到LocalTime的隐式转换,自然会报类型不匹配错误
正确实现方式
首先在类顶部导入需要的类:
import java.time.LocalTime; // 如果需要自定义格式解析字符串,再导入下面这个类 import java.time.format.DateTimeFormatter;
之后通过LocalTime提供的静态工厂方法创建出LocalTime实例,再传入Office构造方法即可,常用两种创建方式:
1. 直接传入时分数值创建
调用LocalTime.of(小时, 分钟)方法,参数是int类型的时、分值,是最直观的写法:
Office office1 = new Office( "Company Name", "Chennai", LocalTime.of(10, 30), // 对应10点30分 LocalTime.of(18, 30) // 对应18点30分 );
如果需要精确到秒、纳秒,LocalTime.of()还有对应的重载方法,支持传入秒、纳秒参数。
2. 解析时间字符串创建
如果你拿到的是标准格式的时间字符串,可以直接调用LocalTime.parse()方法解析:
Office office1 = new Office( "Company Name", "Chennai", LocalTime.parse("10:30"), // 默认支持HH:mm、HH:mm:ss等标准ISO时间格式 LocalTime.parse("18:30") );
如果你的时间字符串是自定义格式(比如用.做分隔符的10.30),可以搭配DateTimeFormatter指定格式解析:
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH.mm"); LocalTime openingTime = LocalTime.parse("10.30", timeFormatter); LocalTime closingTime = LocalTime.parse("18.30", timeFormatter); Office office1 = new Office("Company Name", "Chennai", openingTime, closingTime);
提示:Java是强类型语言,调用方法传参时,除了基本类型的自动提升、对应包装类的自动装箱拆箱场景外,传入的值类型必须和方法声明的参数类型匹配,引用类型需要传入对应类的实例,不能直接传入其他类型的值期望编译器自动转换。
内容的提问来源于stack exchange,提问作者GitaGovinda
相关产品推荐
相关产品推荐

