可以通过__LINE__Ruby或Perl 获取当前行号.例如:
print "filename: #{__FILE__}, line: #{__LINE__}"
Run Code Online (Sandbox Code Playgroud)
Groovy中是否有相同的功能?
我继承了一个java应用程序,它处理请求并在确定应该取消请求时抛出异常.对于以前的开发人员来说,例外是很方便的,因为它们是退出不再适用的逻辑树的简单方法(是一个goto),并且它会向日志打印堆栈跟踪,这是一个很好的信息.似乎是论坛和博客上的共识,不应将异常用于流量控制,并且超过一半的处理请求被取消,因此它们绝对不是例外情况.一个参数是性能,它不适用,因为我们的异常代码运行速度足够多年.另一个论点是,它的结果尚不清楚,我同意这一点.我的问题是:替代方案是什么.我唯一能想到的是,如果处理应该继续,则每个方法都返回true,否则返回false.这似乎会使我的代码变得非常膨胀:
checkSomething();
checkSomethingElse();
Run Code Online (Sandbox Code Playgroud)
进入这个:
boolean continueProcessing = false;
continueProcessing = checkSomething();
if (!continueProcessing) {
return false;
}
continueProcessing = checkSomethingElse();
if (!continueProcessing) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
那么如果该方法应该返回什么呢?任何指导都会很棒.我真的很想观察可用的"最佳实践".
更新:
我可能应该首先提到的另一个问题是,请求在超过50%的时间内被取消,并不意味着某些事情没有正确,这意味着毕竟不需要请求.
从Effective Java中的Exceptions章节:
将代码放在try-catch块中会禁止现有JVM实现可能执行的某些优化
try-catch块为什么以及如何阻止JVM优化?
我有 3 种方法,其中我在大多数内部方法中进行验证。我想知道验证是否失败以及验证失败时的错误消息。我知道我可以使用异常来执行以下操作来传递错误消息..
String methodA(parms){
try{
return methodB(params);
}
catch(UserDefinedRuntimeException ure){
return ure.getMessage();
}
}
String methodB(params){
try{
return methodC(params);
}
catch(UserDefinedRuntimeException ure){
throw ure;
}
catch(Exception otherException){
//handle Exception
otherException.printStackTrace();
}
}
String methodC(params){
if(params.equals("A")||params.equals("B")||params.equals("C")){
return dosomething();
}
else{
throw UserDefinedRuntimeException("invalid input :params should be in [A,B,C]");
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是很多人说创建异常很昂贵
所以我通过谷歌搜索我发现了另一种方法
像下面..
class Response{
int status;
String errMsg;
}
String methodA(params){
Response response = methodB(params);
if(response.status == 1){
return "success";
}
else{
return response.errMsg;
}
} …Run Code Online (Sandbox Code Playgroud) 看到这个问题,每个人都谈论"性能"会如何受到影响,或者当性能成为问题时应该避免例外,等等.
但是我没有看到一个很好的解释,为什么抛出异常对性能不利,这个问题中的每个人似乎都认为这是理所当然的.
我问这个的原因是,我正在尝试优化一个应用程序,并注意到在某些操作上抛出并吞下了几百个异常,例如单击按钮来加载新页面.
这是我最近听到的一句话,因为我一直在努力提高我的应用程序的性能.
通常它提到的方式是这样的:"它很慢,因为它涉及到stack walk"
什么stack walk意思/它意味着walk the stack什么?
我使用@Column(unique=true)
在将数据插入数据库之前检查重复值的最佳做法设置了用户名的唯一约束?
我有一个方法,它将异常作为特定方法的参数.此方法需要根据异常类型执行不同的逻辑.在以下两种处理方式之间..什么是最有效的方式(有第三种更好的方式)..以及为什么
public void processException(Exception ex) {
try {
throw ex;
} catch(CustomException e1) {
//do something
} catch (CustomException2 e2) {
//do something else
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public void processException(Exception ex) {
if (ex instanceof CustomException) {
// do something
} else if (ex instanceof CustomException2) {
// do something else
}
}
Run Code Online (Sandbox Code Playgroud) 我的目标是从java中的字符串中提取名称和数字.示例:输入 - >输出
1234 - >数字:[1234],姓名:[]
1234,34,234 - >数字:[1234,34,234],名称:[]
12,foo,123 - >数字:[12,123],姓名:[foo]
foo3,1234,4bar,12,12foo34 - >数字:[1234,12],姓名:[foo3,4bar,12foo34]
foo,bar - > - > numbers:[],姓名:[foo,bar]
我想出了[^,]+(,?!,+)*匹配字符串的所有部分,但我不知道如何只匹配数字或名称(名称可以包含数字 - 如例子).谢谢
java version "1.7.0_75"
Run Code Online (Sandbox Code Playgroud)
你好,
只是想知道比较以下 2 个函数的首选最佳实践是什么。
第一个抛出应该在调用函数中捕获的 NullPointerException。如果存在空指针异常,则第二个只会返回 false。
抛出异常:
public void disconnect() throws NullPointerException {
if(mClientConnection == null) {
throw new NullPointerException("mClientConnection has an invalid reference");
}
if(mClientConnection.isConnected()) {
mClientConnection.disconnect();
}
mClientConnection = null;
}
Run Code Online (Sandbox Code Playgroud)
只需返回真或假:
public boolean disconnect() {
if(mClientConnection == null) {
log.log(Level.SEVERE, "Cannot disconnect as mClientConnection is null");
return false;
}
if(mClientConnection.isConnected()) {
mClientConnection.disconnect();
}
mClientConnection = null;
return true;
}
Run Code Online (Sandbox Code Playgroud)
通常在过去,我总是通过返回 true 或 false 来选择第二个。但现在我只是在寻找替代解决方案。
非常感谢您的任何建议,
我有实例和类型,并希望得到Some铸造是可能的,None如果没有.
目前我使用自己的实现:
def tryCast[T](o: Any)(implicit manifest: Manifest[T]): Option[T] = {
val clazz = manifest.runtimeClass.asInstanceOf[Class[T]]
if (clazz.isAssignableFrom(o.getClass)) {
Some(o.asInstanceOf[T])
} else {
None
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用标准库中的任何方法吗?
我有一个IModelElement接口,以及几个实现该接口的类.我的代码中的某处有以下声明:
Object childClass = request.getNewObjectType();
Run Code Online (Sandbox Code Playgroud)
这里getNewObjectType()返回一个Class对象.我需要检查Class对象是否代表实现IModelElement接口的类,任何人都知道这是如何实现的?
我有一个从JSON构建的某个地图,它有一些层次结构.例如:
"2015-05": {
"129557": {
"123456": 3,
"654321": 2,
"143526": 1
}
}
Run Code Online (Sandbox Code Playgroud)
它存储为嵌套映射.我想要一个简单的方法来访问密钥.我可以在每个键上进行多次检查,然后查看它是否存在,然后为第二个键执行,依此类推.然而,这似乎很麻烦.我选择做这样的事情:
def getNumFromMap(key1: String, key2: Int, key3: String): Option[Int] ={
try{
map(key1)(key2).get(key3)
}catch{
case e: Exception => None
}
}
Run Code Online (Sandbox Code Playgroud)
此功能可能会被执行数百万次.使用try/catch会降低执行速度吗?有没有更好的方法来实现相同的更快?
java ×10
exception ×3
performance ×3
scala ×2
database ×1
groovy ×1
hashmap ×1
nested ×1
optimization ×1
regex ×1
stack ×1
try-catch ×1
unique ×1
validation ×1