相关疑难解决方法(0)

是抛出异常还是返回null更具Java-thonic?

我有一个不幸的Java库,我继承了它解析JSON.现在,如果你要求一个JSON数组中不存在的密钥,它会以空指针消亡.我要编辑库来做更合理的事情.我想我有两个选择:

1)返回null,以便调用者可以检查

2)抛出更明确的异常(比"Null Pointer"更具描述性),强制调用者处理他们要求不存在的密钥的情况.

我来自python背景,我被强烈吸引到2号,因为它将确保某些骨头不能调用此函数,然后继续使用空值,稍后崩溃其应用程序并可能损坏数据.您认为哪种方式更符合Java的最佳实践?这不是关于同一主题的其他与语言无关的问题的重复.这特别是在Java的背景下!

java error-handling json nullpointerexception

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

Enumerable.Empty to List

例如,如果我有这个方法:

IEnumerable<int> GetRandomNumbers()
{
    // {Codes that generate numbers as List<int>}
    if(generationFails == true)
    {
        return Enumberable.Empty<int>(); // I do this to signal that we have an error
    }
    return numbers;
}
Run Code Online (Sandbox Code Playgroud)

在调用方法中我做:

IEnumerable<int> AddNumber(int number)
{
    var random = GetRandomNumbers();
    var randomList = random  as IList<int> ?? random.ToList(); // Run ToList only if needed
    randomList.Add(number); 
    return randomList;
}
Run Code Online (Sandbox Code Playgroud)

当生成失败时,我得到一个异常"[NotSupportedException:Collection是固定大小的.]".

这是因为Enumerable empty是一个IList,因此.ToList()没有运行,然后我尝试添加到一个固定的Enumberable.Empty.我错误地认为这是一个糟糕的设计,一个继承IList的对象(其中定义了Add)应该支持Add?

我被迫做var randomList = random.ToList()或停止使用Enumberable.Empty?有更好的方法吗?

更新: 我想在我的例子中我不清楚.我希望吞下(或记录)错误,但允许操作继续而不会崩溃.我的评论"我这样做是为了表明我们有错误"是为了告诉其他开发人员阅读代码,这是一种异常行为.

蒂姆所关联的问题的答案就是我所得到的.似乎我们只是没有用于常量集合的接口,因此IList被使用.

c#

4
推荐指数
1
解决办法
2630
查看次数

Java API中的正确返回值?

我来自C世界,在那里我们使用"define"来定义不同的返回值,从C函数返回的值,如下所示:

#define RETURN_SUCCESS 0
#define RETURN_ERROR -1

int myFunc()
{
    if(...) return(RETURN_SUCCESS);
    else if(...) return(RETURN_ERROR);            
}
Run Code Online (Sandbox Code Playgroud)

这是如何在Java中以正确的方式完成的?

假设我有:

public MyObject findMyObject()
{
     MyObject tempObject = search();

     if( tempObject.type == myType ) 
     { 
        return tempObject;
     }
     else
     {
        return null; 
     }
}
Run Code Online (Sandbox Code Playgroud)

可以回来null吗?

有没有更合适的方法呢?

java api

2
推荐指数
1
解决办法
102
查看次数

如果是循环,则抛出自定义异常

public class StringArray {
    private String strArr[];

    public StringArray(int capacity) {
       strArr = new String [capacity];
    }

    public int indexOf(String s) throws StringNotFoundException {
        for(int i=0;i<strArr.length ;++i) {
            if (strArr[i].equals(s)) {
                return i;
            } else {
                throw new StringNotFoundException();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是返回我正在寻找的字符串的索引,如果它在数组中,否则抛出异常.

然而Eclipse说我必须返回一个int.

那么我应该将返回类型更改为void还是有其他选项?

StringNotFoundException是我编写的自定义异常.

java arrays for-loop exception custom-exceptions

0
推荐指数
1
解决办法
247
查看次数