我担心这是一个运行时异常,所以应该谨慎使用它.
标准用例:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎会迫使以下设计:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Run Code Online (Sandbox Code Playgroud)
让它回到被检查的例外.
好的,但让我们继续吧.如果输入错误,则会出现运行时错误.首先,这实际上是统一实施的相当困难的政策,因为您可能必须进行相反的转换:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Run Code Online (Sandbox Code Playgroud)
更糟糕的是 - 虽然检查0 <= pct && pct <= 100
客户端代码可能需要静态执行,但对于更高级的数据(如电子邮件地址)则更是如此,或者更糟糕的是,必须针对数据库进行检查,因此通常客户端代码无法预先验证.
所以基本上我所说的是我没有看到一个有意义的一致政策使用IllegalArgumentException
.它似乎不应该被使用,我们应该坚持我们自己检查的例外.扔这个的好用例是什么?
我有一个Node.js应用程序,它是一个http客户端(目前).所以我在做:
var query = require('querystring').stringify(propertiesObject);
http.get(url + query, function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
Run Code Online (Sandbox Code Playgroud)
这似乎是一个很好的方法来实现这一目标.然而,我有点恼火,我不得不url + query
迈出这一步.这应该由公共图书馆进行封装,但我不认为这存在于节点的http
图书馆还没有,我不知道是什么标准NPM包可能完成它.是否有一种相当广泛使用的方式更好?
url.format方法保存了构建自己的URL的工作.但理想情况下,请求的级别也会高于此级别.
我正在开发一个用Java编写的项目,它要求我构建一个非常大的2-D稀疏数组.非常稀疏,如果这有所不同.无论如何:这个应用程序最关键的方面是时间上的效率(假设内存负载,虽然不能无限制地允许我使用标准的2-D阵列 - 关键范围是两个维度的数十亿).
在阵列中的kajillion细胞中,将有数十万个细胞包含一个物体.我需要能够很快地修改单元格内容.
无论如何:有没有人为此目的知道一个特别好的图书馆?它必须是伯克利,LGPL或类似的许可证(没有GPL,因为该产品不能完全开源).或者,如果只有一种非常简单的方法来制作自制的稀疏数组对象,那也没关系.
我正在考虑MTJ,但没有听到任何关于其质量的意见.
如果inner.sh
是的话
#...
echo first
echo second
echo third
Run Code Online (Sandbox Code Playgroud)
而且outer.sh
是
var=`./inner.sh`
# only wants to use "first"...
Run Code Online (Sandbox Code Playgroud)
如何var
通过空格分割?
我正在尝试用Java实现Factory模式.我有一个名为Shape的类,Circle和Triangle扩展.问题是Shape构造函数只获得2个参数,而Circle获得3个参数,因此Triangle(我不会在代码部分显示,因为它与Circle相同).为了更好地展示它:
private interface ShapeFactory{
public Shape create(int x, int y);
}
private class CircleFactory implements ShapeFactory{
public Shape create(float radius, int x, int y){ //error
return new Circle(radius, x,y);
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何克服这个问题?我不得在工厂内收到用户的意见(必须从外面收到).
谢谢!
关于如何最好地处理这个问题,我听到了非常矛盾的事情,并且陷入了以下两难境地:
我一直都知道最好的做法就是让它们离开以便JVM可以死掉,因为JVM在那时处于不一致的状态,但这似乎不适用于此.
我正在研究java线程和死锁,我理解死锁的例子,但我想知道是否有一般规则要遵循以防止它.
我的问题是,是否有规则或技巧可以应用于java中的源代码以防止死锁?如果是,您能解释一下如何实施吗?
我想知道是否有一种更有效的方式在数组中交换两个元素,而不是像这样做:
String temp = arr[1];
arr[1] = arr[2];
arr[2] = temp;
Run Code Online (Sandbox Code Playgroud)
嗯,这显然是坏事,甚至是错误的,但我需要经常交换所以我感兴趣,如果有任何Libs或提供更有效的方法来做到这一点?
我知道这个语法
var=`myscript.sh`
Run Code Online (Sandbox Code Playgroud)
要么
var=$(myscript.sh)
Run Code Online (Sandbox Code Playgroud)
将捕获结果(stdout
)myscript.sh
转化为var
.我可以重定向stderr
到stdout
,如果我想同时捕获.如何将它们中的每一个保存为单独的变量?
我在这里的用例是如果返回代码非零,我想要回显stderr
并禁止其他方式.可能有其他方法可以做到这一点,但这种方法似乎可行,如果它实际上是可能的.
我需要在字符串中找到最长的序列,但需要注意序列必须重复三次或更多次.所以,例如,如果我的字符串是:
fdwaw4helloworldvcdv1c3xcv3xcz1sda21f2sd1ahelloworldgafgfa4564534321fadghelloworld
然后我想要返回值" helloworld ".
我知道有几种方法可以实现这个目标,但我面临的问题是实际的字符串非常大,所以我真的在寻找一种可以及时完成的方法.