我真正喜欢的 Java 功能之一是自动装箱,其中编译器自动在原语及其包装类之间进行转换。
我正在用 Objective-C/Cocoa 编写一个核心数据应用程序,我发现以编程方式处理我的整数属性令人沮丧。原因如下:
//img is a managed object that I have fetched
NSString* filename = [NSString stringWithFormat:@"image%d.png", [[img valueForKey:@"imageID"] intValue]];
如果我碰巧忘记了intValue
我有时会忘记的消息,那么传递给的 intstringWithFormat:
实际上就是指针值。
问题是这完全无声地发生——没有编译器错误或警告。有时,当这个愚蠢、愚蠢的事情成为问题时,我会花太多时间进行调试。
有没有办法改变我的编程风格或编译器设置以防止我陷入那个陷阱?
编辑:我不清楚上面的例子只是我遇到麻烦的许多地方之一。这是另一个与字符串无关的假设示例:
实体CollegeClass
有两个整数属性:courseNumber
和enrollmentLimit
。假设我想比较课程编号:
//classFoo is a NSManagedObjects I've fetched
if ([[classFoo valueForKey@"courseNumber"] intValue] < 400) {
NSLog(@"undergraduate class");
}
或者类似地,假设我想计算 CS 部门所有课程的平均入学人数限制。