这开始作为一个简单的错误:我有YYYY,而不是yyyy在我的格式字符串的SimpleDateFormat对象.但是我对使用不正确格式字符串的测试结果感到困惑.
这段代码:
@Test
public void whatTheHell() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
Date d1 = sdf.parse("01/07/2016");
Date d2 = sdf.parse("02/08/2016");
Date d3 = sdf.parse("11/29/2027");
System.out.println(d1.toString());
System.out.println(d2.toString());
System.out.println(d3.toString());
} catch (ParseException pe) {
fail("ParseException: " + pe.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026
Run Code Online (Sandbox Code Playgroud)
我在这里阅读了关于'Y'参数的文档:https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html,但我仍然看不到它的逻辑在这里工作.特别是最后一个例子:我可以有点理解1月(也可能是2月)的日期如何转化为上一年的12月,但将11月29日的日期向后移动11个月让我感到困惑.12月27日有什么特别之处?
谁能解释一下?
更多信息
@Jan建议依赖toString()方法可能是个问题,所以我定义了一个日期格式,以YYYY MM dd '-' yyyy MM dd …
我最近开始使用一个使用" 流畅界面 " 的API .我正在努力找到如何配置Eclipse代码格式化程序以正确支持它.
我想得到的是:
Foo myFoo = new Foo()
.setThis()
.setThat()
.setTheOther()
.setOneMoreThing();
Run Code Online (Sandbox Code Playgroud)
但我无法找到正确的设置:我最终得到这样的东西:
Foo myFoo = new Foo().setThis().setThat()
.setTheOther().setOneMoreThing();
Run Code Online (Sandbox Code Playgroud)
这远远不够可读.
有人已经解决了这个吗?
我有一组所有共享一些共同属性的类,所以我将它们都扩展为一个公共基类BaseEntity.所以我有,例如Foo extends BaseEntity和Bar extends BaseEntity.
我也希望这些Foo和Bar对象的列表可以排序,所以我已经实现了Comparable.我将类定义为Foo extends BaseEntity implements Comparable<Foo>和Bar extends BaseEntity implements Comparable<Bar>,并且按照预期对Foos或Bars 列表进行排序- 当然,排序的细节在不同的子类中是不同的.但是,当我事先不知道我是否会有Foos或Bars 时,我无法弄清楚如何进行分类工作.例如,此代码无法编译:
public class UtilityClass<T extends BaseEntity> {
...bunch of stuff...
List<T> values;
public List<T> sort() {
Collections.sort(values);
return values;
}
...more methods...
}
Run Code Online (Sandbox Code Playgroud)
带有错误消息 Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<T>). …
我有一个关于偷偷摸摸地获取访问包访问成员的问题.具体来说,我想扩展一个类 - 让我们称之为com.acme.Foo- 来添加一些功能.这是纯粹的补充:Foo只需委托超类的方法就可以支持所有当前的方法.但是,没有可访问的构造函数Foo,所以我无法扩展类,我的实现不会通过"isA"测试成为一个Foo.没有表达的接口Foo- 我可以使用而不是继承.
这是我想到的一个偷偷摸摸的想法:Foo有一个包访问构造函数,所以为什么不在com.acme我的源文件夹中创建一个包并InheritableFoo在该包中创建一个类:
package com.acme;
public class InheritableFoo extends Foo {
public InheritableFoo() {
super();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以Foo通过扩展实现我的扩展InheritableFoo,因为那个DOES有一个可访问的构造函数.
这种感觉都是错误的,并且有点不道德:我不尊重原始程序员在决定不公开构造函数时做出的决定Foo.但情况可能就是他们只是采用了"拒绝一切,直到有理由"的方法.无论哪种方式,这个想法有什么根本的错误吗?如果我走这条路,我将来会给自己带来问题,如果是的话,为什么?