如何在Java 8上的maven surefire中设置单元测试的时区?
使用Java 7时,过去常常使用systemPropertyVariables以下配置,但使用Java 8时,测试只使用系统时区.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<user.timezone>UTC</user.timezone>
</systemPropertyVariables>
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我该如何解决?
使用Java中的参数化类型,检查参数是否在其绑定工作中的规则如何完全针对通配符?
鉴于这样的类:
class Foo<T extends Number> {}
Run Code Online (Sandbox Code Playgroud)
试验编译器接受的内容可以了解:
? extends使用不相关的接口类型被允许通配符:Foo<? extends Runnable>是有效? extends使用一个不相关的类类型是不允许的通配符:Foo<? extends Thread>无效.这是有道理的,因为没有类型可以是两者的亚型Number和Thread? super通配符中,通配符的下限必须是类型变量的边界的子类型:Foo<? super Runnable>不允许,因为Runnable它不是子类型Number.同样,这种限制非常有意义.但这些规则在哪里定义?看看Java语言规范第4.5节,我没有看到任何区别于类的接口; 在应用我对JLS的解释时,Foo<? super Runnable>据说是有效的.所以我可能误解了一些东西.这是我的尝试:
从JLS的那一部分:
参数化类型由类或接口名称C和实际类型参数列表<T1,...,Tn>组成.如果C不是泛型类或接口的名称,或者实际类型参数列表中的类型参数的数量与C的已声明类型参数的数量不同,则是编译时错误.在下文中,每当我们说话时除了明确排除之外,我们还包括类或接口类型的通用版本.在本节中,让A1,...,An成为C的形式类型参数,并且让Bi为AI的声明边界.符号[Ai:= Ti]表示用类型Ti替换类型变量Ai,1 <= i <= n,并且在整个说明书中使用.
令P = G <T1,...,Tn>是参数化类型.必须是这样的情况,在P经历捕获转换(第5.1.10节)之后导致类型G <X1,...,Xn>,对于每个实际类型参数Xi,1 <= i <= n, Xi <:Bi [A1:= X1,...,An:= Xn](§4.10),或发生编译时错误.
将其应用于P = Foo<? super Runnable>:得到C = Foo,n = …
当您将两个分支合并在一起时,git会创建一个单独的提交,其中包含一条消息Merge branch 'master' into my-branch.对于非平凡的合并,我很清楚这很有用:它将事物合并的历史记录与任何其他更改分开.但是当合并很简单时(例如,当两个分支不影响任何共同的文件时),单独的合并提交的目的是什么?
您可以避免使用该提交git merge --no-commit.然后,您也可以在此提交中添加"真实"更改.这样你就可以避免看似毫无用处的额外提交.但是该手册页警告说:
您应该避免滥用此选项以将重大更改隐藏到合并提交中.像碰撞版本/版本名称这样的小修正是可以接受的.
这是为什么?
如果提交中的实际更改标记为o仅合并提交X,则这是以下两种情况之间的区别:
o---o-o-o---o--- master
\ \ \ \
o-o-X-o-X-o-X-o--- my-feature
o---o-o-o---o--- master
\ \ \ \
o-o-o---o---o--- my-feature
Run Code Online (Sandbox Code Playgroud)
为什么第一个优先于第二个呢?
PS:假设我的功能是其他人也使用的公共分支,因此不能选择rebase.
你如何在bash中编写一个函数来执行它作为参数给出的命令,其中
换句话说,如何编写尽可能透明的包装函数.
包装函数的目标可以是例如在给定命令之前和之后设置当前目录,和/或设置环境变量,或者给定命令花费多长时间,...作为一个简单的例子,我在这里采取一个函数只打印一行然后执行给定的命令.
第一次尝试:
function wrap1 {
echo Starting: "$@"
"$@"
}
Run Code Online (Sandbox Code Playgroud)
你可以像使用它一样wrap1 echo hello.但问题是你不能做alias myalias echo,然后调用wrap1 myalias hello:它不会解决别名.
另一种尝试使用eval:
function wrap2 {
echo Starting: "$@"
eval "$@"
}
Run Code Online (Sandbox Code Playgroud)
现在调用别名有效.但问题是它也会对参数进行评估.例如,wrap2 echo "\\a"打印a而不是\a因为参数被评估两次.
shopt -s expand_aliases 这似乎也没有帮助.
有没有办法同时评估像wrap2这样的别名,但仍然像wrap1一样直接传递参数?
如何制作用户可以选择的ComboBox null?
如果您只是在数据提供者null中创建一个组合框,则会显示该值,但用户无法选择它:
<mx:ComboBox id="cb" dataProvider="{[null, 'foo', 'bar']}" />
Run Code Online (Sandbox Code Playgroud)
有没有办法让null可选?
解决方法是将一个项添加到dataProvider中,该项不是null但是'表示'为null; 然后每次访问组合框时在null和该对象之间进行映射.但这不是一个优雅的解决方案; 在访问'可空'组合框的所有代码中,你总是要记住这个映射...
编辑:扩展为什么我不喜欢变通方法:当然可以在子类中完成,但要么我引入新属性(如nullableSelectedItem); 但是你必须小心,始终使用这些属性.或者我覆盖ComboBoxes selectedItem; 但是我很害怕打破基类:它可能不喜欢改变它对当前所选项目的内容的想法.即使这个脆弱的破解工作,在顶部selectedItem和dataProvider那么这个nullItem也需要进行处理的特殊data和listData用于渲染,在labelFunction,然后它可能仍然在事件暴露了组合框发送...这可能会奏效,但它是一个相当hack只是为了解决这个问题:如果用户点击它没有激活它的项目(其余的则ComboBox处理null罚款).(另一个替代方案是将一个ui组件委托给ComboBox,但是为了避免这个小问题,甚至还有更多的代码)