小编Ata*_*ete的帖子

Java或C#中的异常管理的最佳实践

我一直在决定如何在我的应用程序中处理异常.

如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象.不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的).

因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE给调用者.我的逻辑是,所有调用者真正关心的是任务是否成功,而不是为什么它不成功.

这是典型方法的一些示例代码(在JAVA中)

public boolean doSomething(Object p_somthingToDoOn)
{
    boolean result = false;

    try{
        // if dirty object then clean
        doactualStuffOnObject(p_jsonObject);

        //assume success (no exception thrown)
        result = true;
    }
    catch(Exception Ex)
    {
        //don't care about exceptions
        Ex.printStackTrace();
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我应该在调用堆栈中一直冒出异常吗?).

总结关键问题:

  1. 是否可以捕获异常但不会冒泡或正式通知系统(通过日志或通知用户)?
  2. 对于不会导致所有需要try/catch块的异常的最佳实践有哪些?

跟进/编辑

感谢所有反馈,在网上找到了一些关于异常管理的优秀来源:

似乎异常管理是根据上下文而变化的事情之一.但最重要的是,人们应该如何管理系统中的异常.

另外注意通过过多的尝试/捕获代码腐烂或不给予例外它的尊重(例外是警告系统,还需要警告什么?).

此外,这是m3rLinEz的一个很好的选择评论.

我倾向于同意Anders Hejlsberg和你的看法,大多数来电者只关心操作是否成功.

从这个评论中,它提出了一些在处理异常时要考虑的问题:

  • 抛出此异常有什么意义?
  • 处理它有什么意义?
  • 呼叫者是否真的关心异常,还是只关心呼叫是否成功?
  • 是否强制调用者管理潜在的异常优雅?
  • 你是否尊重这种语言的含义?
    • 你真的需要返回像布尔这样的成功标志吗?返回boolean(或int)更像是一种C心态而不是Java(在Java中你只是处理异常).
    • 遵循与语言相关的错误管理结构:)!

c# java error-handling exception

117
推荐指数
5
解决办法
3万
查看次数

ProGuard for Android和GSON

我正在为我的Android项目设置ProGuard.我的项目也使用GSON.

我已经研究了与GSON和Android兼容的ProGuard配置,并且遇到了google-gson提供的这个示例https://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard- example/proguard.cfg.

ProGuard配置复制如下:

##---------------Begin: proguard configuration common for all Android apps ----------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class …
Run Code Online (Sandbox Code Playgroud)

java configuration android proguard gson

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

如何使用按位运算符将多个Integer值传递给Java函数?

在应用程序框架中,我不断看到允许您将多个Int值(通常用于代替枚举)传递到函数中的框架.

例如:

public class Example
{ 
    public class Values
    {
        public static final int ONE = 0x7f020000;
        public static final int TWO = 0x7f020001;
        public static final int THREE = 0x7f020002;
        public static final int FOUR = 0x7f020003;
        public static final int FIVE = 0x7f020004;
    }

    public static void main(String [] args)
    {
        // should evaluate just Values.ONE
        Example.multiValueExample(Values.ONE);

        // should evalueate just values Values.ONE,  Values.THREE, Values.FIVE
        Example.multiValueExample(Values.ONE | Values.THREE | Values.FIVE);

        // should evalueate just values Values.TWO , Values.FIVE …
Run Code Online (Sandbox Code Playgroud)

java integer bit-manipulation function bitwise-operators

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

黑莓权限 - "可信应用程序状态"指的是什么?

对于某些设备用户,在启动时会显示以下权限对话框

"您想授予AppX受信任的应用程序状态吗?"

用户说是,应用运行正常.但"可信应用程序状态"是什么意思?这看起来很模糊,大多数权限对话框指的是制作http消息,访问联系信息等.

最后的问题
"可信应用程序状态"是指访问客户端设备上的特定API或特定权限设置吗?

我想知道这个的根本原因,因为如果它是API访问问题,我可能会从应用程序中排除这些调用.

permissions blackberry access-control trusted

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

黑莓轨迹球点击,而不是响应事件,上下文菜单显示为什么?

我在某些设备上遇到以下情况:当使用点击字段并期望响应时,设备会在屏幕底部中央显示上下文菜单,而不是正确响应该点击事件.

navigationUnclick和trackwheelUnclick
从我读过的内容中,我可以覆盖navigationUnclick和trackwheelUnclick,以防止菜单显示.我这样做是为了屏幕级别,但重现中心菜单场景很困难.这是正确的approch吗?

为什么会这样?有什么方法可以解决这个问题吗?

events blackberry contextmenu menu

3
推荐指数
1
解决办法
2605
查看次数