刚收到评论评论我静态导入该方法并不是一个好主意.静态导入是来自DA类的方法,该类主要使用静态方法.因此,在业务逻辑的中间,我有一个似乎属于当前类的da活动:
import static some.package.DA.*;
class BusinessObject {
void someMethod() {
....
save(this);
}
}
Run Code Online (Sandbox Code Playgroud)
审稿人并不热衷于我改变代码而我没有,但我确实同意他.给出非静态导入的一个原因是,在定义方法的地方很混乱,它不在当前类中而不在任何超类中,所以它也有一段时间来识别它的定义(基于Web的审查系统没有可点击的IDE之类的链接:-)我真的不认为这很重要,静态导入仍然很新,我们很快就会习惯定位它们.
但另一个原因,我同意的是,一个不合格的方法调用似乎属于当前对象,不应该跳转上下文.但如果确实属于它,那么扩展超级类是有意义的.
所以,当它是有意义的静态导入的方法呢?你什么时候做的?您是否喜欢不合格电话的样子?
编辑:流行的观点似乎是静态导入方法,如果没有人会把它们混淆为当前类的方法.例如,java.lang.Math和java.awt.Color中的方法.但是如果abs和getAlpha不模糊,我不明白为什么readEmployee是.在许多编程选择中,我认为这也是个人偏好的事情.
感谢您的回复,我正在结束这个问题.
参考我的问题java.util.concurrent.locks.Lock的AutoCloseable包装中的任何风险?,我想知道为什么trh try-with-resource
需要一个命名的局部变量.
我目前的用法如下:
try (AutoCloseableReentrantReadWiteLock.Lock l = _lock.writeLock()) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
该变量l
在try块内未使用,仅污染命名空间.从我记忆中的类比C#
using
语句不需要本地命名变量.
是否有任何理由无法支持以下内容,并且在try块结束时关闭了一个匿名局部变量?
try (_lock.writeLock()) {
// do something
}
Run Code Online (Sandbox Code Playgroud) 该find
命令在Windows和Unix中完全不同.在Windows上,它是一个类似fgrep
的实用程序,列出文件中的匹配行; 在Unix上 - 和Cygwin上 - 它列出了符合某些标准的文件名.
Cygwin bash 将其标准目录添加到当前路径,因此内部bash $PATH
通常是/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
.
开始更新以提供其他详细信息
例如,我有许多使用gnu find
命令的脚本 - 例如脚本清除不包含文件的目录树:
purge-empty-dirs.sh
find . -depth -type d -empty | xargs rmdir -p
Run Code Online (Sandbox Code Playgroud)
我还有一个bat文件来启动我的构建,它使用windows find命令,它搜索匹配字符串的行(类似于gnu grep
).
build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...
Run Code Online (Sandbox Code Playgroud)
现在,为了我的bash脚本工作,我需要/bin
在路径之前c:\windows\system32
.但是为了运行我的bat文件,我需要c:\windows\system32
在路径之前/bin
一般来说,我们可能会声称所有bat文件都应该使用bash继承的原始环境执行,而不是修改后的环境.那有意义吗?
结束更新
这应该如何,但打破从bash执行的bat文件.解决这个问题的最佳方法是什么?
有没有办法强制Cygwin 使用它开始的环境执行bat文件(甚至所有 Windows可执行文件)?我在考虑start /i
cmd.exe 的行为.我正在考虑cygstart
通过$PATH
在.bash_profile
/中保存环境(或至少)来编写我自己的实用工具.bashrc …
虽然java.util.properties
允许读取和写入属性文件,但写入不会保留格式.这并不奇怪,因为它与属性文件无关.
是否有一个PropertyFile
类 - 或者某些类 - 保留注释和空行并更新属性值?
我可能会冒这个问题冒险.
在我看来,为新类显式指定serialVersionUID是不好的.考虑两种情况,即在布局应该更改时不更改它,并在不应该更改时更改它.
不应该改变它何时应该被改变发生几乎只有在它是明确的时候.在这种情况下,它会导致一些非常微妙,难以发现的错误.特别是在开发过程中,当类布局经常变化时.但是如果它没有明确指定,它将会改变并且反序列化将大声破坏,最有可能通过清除存储库来解决.
不应该发生的情况几乎只有在隐含时才会发生.这是一种罕见的情况,其中类布局已更改但我们仍希望从旧的序列化blob反序列化.这可能会在QA期间被捕获(从5.2升级到5.2.1之后的奇怪错误,请参阅附加的堆栈跟踪),并且可以通过设置显式值来轻松修复.
评论?
随着try-with-resource
Java 7的推出,我很惊讶地看到Lock
它还没有被改造成一个AutoCloseable
.它似乎相当简单,所以我自己添加如下:
class Lock implements AutoCloseable {
private final java.util.concurrent.locks.Lock _lock;
Lock(java.util.concurrent.locks.Lock lock) {
_lock = lock;
_lock.lock();
}
@Override
public void close() {
_lock.unlock();
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于一个AutoCloseableReentrantReadWiteLock
类,用法如下:
try (AutoCloseableReentrantReadWiteLock.Lock l = _lock.writeLock()) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
由于这似乎是直接和规范使用自动关闭RAII我认为必须有一个很好的理由这不应该做.有人知道吗?
这个问题是由奇怪的HashMap.put()行为引起的
我想我明白为什么Map<K,V>.put
需要K
而Map<K,V>.get
采取的Object
,似乎不这样做会打破太多现有的代码.
现在我们陷入了一个容易出错的场景:
java.util.HashMap<Long, String> m = new java.util.HashMap<Long, String>();
m.put(5L,"Five"); // compiler barfs on m.put(5, "Five")
m.contains(5); // no complains from compiler, but returns false
Run Code Online (Sandbox Code Playgroud)
无法这一已被如果返回true解决Long
值withing int
范围和值相等?
升级Cygwin后,X Server无法启动.据我所知,命令输出中唯一的错误信息是:
xinit:XFree86_VT属性意外地有0个项而不是1个
/var/log/xwin/XWin.0.log
没有这个消息.我已粘贴整个输出位于底部.
在从cygwin镜像初始安装后,我使用了Cygwin Ports来获取最新版本的git
.我的最新更新来自Cygwin镜像.这可能导致了这个问题吗?
我已经尝试从cygwin镜像重新安装所有内容,使用每个类别的重新安装选项.除了卸载所有内容并重新安装之外,我还有其他选择吗?
$ /usr/bin/startxwin Welcome to the XWin X Server Vendor: The Cygwin/X Project Release: 1.16.2.0 OS: CYGWIN_NT-6.1 OAKN00563024A 1.7.33-2(0.280/5/3) 2014-11-13 15:47 x86_64 OS: Windows 7 Service Pack 1 [Windows NT 6.1 build 7601] (Win64) Package: version 1.16.2-1 built 2014-11-11 XWin was started with the following command line: /usr/bin/XWin :0 -multiwindow -nolisten tcp -auth /home/I063510/.serverauth.1328 (II) xorg.conf is not supported (II) See http://x.cygwin.com/docs/faq/cygwin-x-faq.html for more information LoadPreferences: /home/I063510/.XWinrc not found …
在从getter方法返回之前,我经常使集合字段不可修改:
private List<X> _xs;
....
List<X> getXs(){
return Collections.unmodifiableList(_xs);
}
Run Code Online (Sandbox Code Playgroud)
但如果上面的X本身就是一个List,我想不出一个方便的方法:
private List<List<Y>> _yLists;
.....
List<List<Y>> getYLists() {
return Collections.unmodifiableList(_yLists);
}
Run Code Online (Sandbox Code Playgroud)
上面的问题当然是虽然客户端无法修改列表列表,但它可以从嵌入列表中添加/删除Y对象.
有什么想法吗?
Java Collections.singletonList(T)
只返回List<T>
一个元素.C#中有类似的东西会返回IList
吗?
java ×7
cygwin ×2
auto-close ×1
batch-file ×1
c# ×1
equals ×1
properties ×1
raii ×1
unmodifiable ×1