除了Integer.parseInt()
处理减号(如文件所述),Integer.valueOf()
和之间是否还有其他差异Integer.parseInt()
?
因为两者都不能解析,
为十进制千位分隔符(产生NumberFormatException
),有没有一个已经可用的Java方法来做到这一点?
我正在编写一个验收测试项目,由于各种原因,这依赖于另一个打包为WAR的项目.我已经设法使用maven-dependency-plugin解压缩WAR,但我无法让我的项目包含unpacked WEB-INF/lib/*.jar
并WEB-INF/classes/*
包含在类路径中,因此构建失败.有没有办法将这些文件包含在类路径中,还是有更好的依赖WAR的方法?
非常感谢.
我有一个Mercurial存储库,我只在本地使用...这是我的个人用法(所以我不会"推"到任何地方).
我提交了3个文件,但之后我明白我应该提交4个文件...
有没有办法"回滚"我的最后一次(最新的,只有一次)提交,并"重新发送"它与正确的文件?
(我不知道为什么,但我的" 修改当前修订版 "选项不活动,所以我不能用它...)
我们正在创建多个子类加载器,以将多个子应用程序加载到Java应用程序"容器"中,进行热部署原型设计.当特定类加载器的类路径发生更改(即已添加,删除,更新了jar)时,旧的类加载器将被丢弃(未引用),并为新的jar类路径创建新的类加载器.
更新类路径,触发热部署后,我们进行了堆转储.堆转储(使用Memory Analyzer)表明旧的类加载器没有被垃圾回收.父类加载器中的某些类正在缓存旧的类加载器.调用以下内容来清除这些缓存:
java.lang.ResourceBundle.clearCache(classLoader);
org.apache.commons.logging.LogFactory.release(classLoader);
java.beans.Introspector.flushCaches();
Run Code Online (Sandbox Code Playgroud)
即使在清除了上述缓存之后,旧的类加载器仍然没有被垃圾收集.对类加载器的其余引用包括以下内容:
以上所有都是类加载器中的循环引用,它应该触发垃圾回收.我不确定为什么不是.有没有人知道为什么旧的类加载器仍然没有被垃圾收集,即使有循环引用?
我目前正试图混淆一系列库.我的基本库包含几个使用类型参数的类和方法,由于Proguard混淆删除了类型参数,因此其他代码无法使用它.消除混淆消除了这些问题.我已阅读所有ProGuard使用文档,示例和故障排除,但无法找到有关如何处理类型参数或ProGuard的哪个方面剥离类型参数的任何文档.
构造函数类型参数问题:
库1包含以下类:
public abstract class AbstractFactoryFactory<T>
Run Code Online (Sandbox Code Playgroud)
库2包含几个扩展上述类的类,但构造函数抛出一个编译器错误,指出:
error: type AbstractFactoryFactory does not take parameters
Run Code Online (Sandbox Code Playgroud)
返回类型参数问题:
库1具有Foo类,具有以下方法:
public List<String> doSomething()
Run Code Online (Sandbox Code Playgroud)
Libary 2尝试使用doSomething方法,但在混淆后,该方法返回一个无类型列表,该列表生成以下编译器错误,指出:
error: incompatible types Object
Run Code Online (Sandbox Code Playgroud)
Proguard.cfg
-dontoptimize
-renamesourcefileattribute SourceFile
-keepparameternames
-keepattributes Exceptions,*Annotation*,InnerClasses,SourceFile,LineNumberTable,Deprecated
-keep public class * {
public protected *;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembernames class * {
java.lang.Class class$(java.lang.String);
java.lang.Class class$(java.lang.String, boolean);
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class * implements java.io.Serializable {
static final …
Run Code Online (Sandbox Code Playgroud) 编辑:删除了对C#的引用,因为唯一接受的答案是关于Java.如果有人需要有关C#中websocket服务器实现的信息,请提出一个新问题.
您是否知道用Java创建WebSockets服务器的"生产就绪"框架?我找到了一个库http://nugget.codeplex.com/但我不知道它是如何稳定和快速的.
默认情况下,slf4j与jdk(slf4j-jdk14-1.6.1.jar)一起使用时,不会记录调试消息.我该如何启用它们?
我无法在官方文档,网络或此处找到有关如何启用它的信息.
我发现了一些信息(虽然失败了)在%JDK_HOME%/ lib中创建一个文件,并在配置文件中定义了那里的级别.但是,我想在编译/运行时定义级别,以便我可以从具有不同日志记录级别的IDE运行和调试我的应用程序.
是不是我可以设置一些环境变量,或VM arg?
我找到了一些java nio的示例代码:
ServerSocketChannel server = ServerSocketChannel.open();
Selector selector = Selector.open();
server.socket().bind(new InetSocketAddress(8080));
server.configureBlocking(false);
server.register(selector, SelectionKey.OP_ACCEPT);
while(true) {
selector.select();
Iterator iter = selector.selectedKeys().iterator();
while (iter.hasNext()) {
SelectionKey key = (SelectionKey) iter.next();
iter.remove(); // Why remove it?
process(key);
}
}
Run Code Online (Sandbox Code Playgroud)
当他获得所选择的密钥时,他会删除循环中的密钥.我们为什么要这样做?
UPDATE
感谢EJP和user270349提供的答案,我想我现在明白了,让我详细解释一下.
选择器中有2个表:
注册表:当我们打电话时channel.register
,会有一个新项目(密钥)进入它.只有我们打电话key.cancel()
,它才会从此表中删除.
准备选择表:当我们调用时selector.select()
,选择器将查找注册表,找到可用的键,将它们的引用复制到该选择表.选择器不会清除此表的项目(这意味着,即使我们selector.select()
再次调用,也不会清除现有项目)
这就是我们iter.remove()
从选择表中获取密钥时必须调用的原因.如果没有,我们将一次又一次地获得密钥,selector.selectedKeys()
即使它还没有准备好使用.
我想问为什么java注释使用了这么多...我知道他们替换了例如jpa中的xml配置,但为什么这种配置会被使用呢?考虑一下这段代码:
@Entity
class Ent{
// some fields
}
//... somewhere in the other file far far away
class NonEnt{
// whatever here
}
Run Code Online (Sandbox Code Playgroud)现在,当我尝试将其置于持久化上下文中时,使用EntityManager
's persist方法,我会在尝试持久化NonEnt
实例时遇到运行时错误(更好的是获得编译错误).对我来说有明显的解决方案,强制实体实现一些无方法接口,而不是使用@Annotations.但这在框架设计师中并不流行,这个解决方案的缺点是什么?我有一个JUnit测试类的JUnit套件.如果在该测试方法上存在某个注释,我想在套件上定义一个规则,以便在运行每个单元测试之前和之后对数据库执行某些操作.
我已经能够在套件和测试类中创建一个@ClassRule,它将在每个类之前执行此操作(这不够好)并且我已经能够使用测试类本身定义测试规则,但是这样是重复的,似乎不是很干.
是否可以在套件中定义每个测试方法规则,还是必须将它们添加到每个测试中?
编辑:为了澄清,我想在套件中声明代码,它将在测试类中的测试方法之间运行(即"围绕").