小编Mis*_*ble的帖子

静态导入方法的好用例是什么?

刚收到评论评论我静态导入该方法并不是一个好主意.静态导入是来自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 static-import

127
推荐指数
7
解决办法
8万
查看次数

为什么try-with-resource需要一个局部变量?

参考我的问题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)

java try-with-resources

57
推荐指数
3
解决办法
9581
查看次数

如何从使用Windows find命令的cygwin bash执行bat文件

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 /icmd.exe 的行为.我正在考虑cygstart通过$PATH.bash_profile/中保存环境(或至少)来编写我自己的实用工具.bashrc …

cygwin batch-file

37
推荐指数
2
解决办法
8万
查看次数

更新属性文件的更好的类?

虽然java.util.properties允许读取和写入属性文件,但写入不会保留格式.这并不奇怪,因为它与属性文件无关.

是否有一个PropertyFile类 - 或者某些类 - 保留注释和空行并更新属性值?

java properties

35
推荐指数
4
解决办法
2万
查看次数

显式serialVersionUID被认为有害吗?

我可能会冒这个问题冒险.

在我看来,为新类显式指定serialVersionUID是不好的.考虑两种情况,即在布局应该更改时不更改它,并在不应该更改时更改它.

不应该改变它何时应该被改变发生几乎只有在它是明确的时候.在这种情况下,它会导致一些非常微妙,难以发现的错误.特别是在开发过程中,当类布局经常变化时.但是如果它没有明确指定,它将会改变并且反序列化将大声破坏,最有可能通过清除存储库来解决.

不应该发生的情况几乎只有在隐含时才会发生.这是一种罕见的情况,其中类布局已更改但我们仍希望从旧的序列化blob反序列化.这可能会在QA期间被捕获(从5.2升级到5.2.1之后的奇怪错误,请参阅附加的堆栈跟踪),并且可以通过设置显式值来轻松修复.

评论?

java serialization serialversionuid

25
推荐指数
2
解决办法
5958
查看次数

java.util.concurrent.locks.Lock的AutoCloseable包装中的任何风险?

随着try-with-resourceJava 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我认为必须有一个很好的理由这不应该做.有人知道吗?

java raii auto-close try-with-resources

18
推荐指数
1
解决办法
2389
查看次数

为什么Long.valueOf(0).equals(Integer.valueOf(0))假的?

这个问题是由奇怪的HashMap.put()行为引起的

我想我明白为什么Map<K,V>.put需要KMap<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范围和值相等?

java equals

16
推荐指数
3
解决办法
2万
查看次数

在cygwin升级后,X无法启动

升级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 …

cygwin

16
推荐指数
3
解决办法
2万
查看次数

如何创建深度不可修改的集合?

在从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 unmodifiable

15
推荐指数
1
解决办法
6640
查看次数

在C#中有类似于singletonList的东西吗?

Java Collections.singletonList(T)只返回List<T>一个元素.C#中有类似的东西会返回IList吗?

c#

14
推荐指数
4
解决办法
8228
查看次数