是否有一种优雅的方法将基元数组转换为相应容器对象的数组 - 例如,将a byte[]转换为a Byte[]?还是我坚持循环并手动完成?
是的,for循环并不是很困难.只是有点难看.
我正在开发一个Java项目,我需要异步运行多个任务.我被引导相信Executor是我做这件事的最佳方式,所以我很熟悉它.(可以获得报酬!)然而,我不清楚最好的方法是完成我想要做的事情.
为了争论,让我说我有两个任务在运行.预计两者都不会终止,并且两者都应该在应用程序的生命周期内运行.我正在尝试编写一个主包装类,以便:
现在,应该注意的是,两个任务的实现都会将代码包装run()在一个永远不会运行完成的无限循环中,并且try/catch块应该处理所有运行时异常而不会中断循环.我正试图增加另一层确定性; 如果我或跟随我的人做了一些愚蠢的事情来挫败这些保护措施并停止任务,那么应用程序需要做出适当的反应.
是否有最佳实践来解决这个问题,那些比我更有经验的人会推荐?
FWIW,我已经掀起了这个测试类:
public class ExecTest {
private static ExecutorService executor = null;
private static Future results1 = null;
private static Future results2 = null;
public static void main(String[] args) {
executor = Executors.newFixedThreadPool(2);
while(true) {
try {
checkTasks();
Thread.sleep(1000);
}
catch (Exception e) {
System.err.println("Caught exception: " + e.getMessage());
}
}
}
private static void checkTasks() throws Exception{
if (results1 == null || results1.isDone() || results1.isCancelled()) {
results1 = executor.submit(new Test1());
} …Run Code Online (Sandbox Code Playgroud) 我显然误解了一些关于hashrefs如何在Perl中工作的东西,我在这里想要纠正这个问题.
我需要获得一个hashref的副本,我可以在不修改原始文件的情况下进行操作.根据我的研究,复制hashref就像使用equals运算符一样简单:
my $hashref_copy = $hashref;Run Code Online (Sandbox Code Playgroud)
但据我所知,所有这一切都是$hashref_copy指向原始对象的指针.考虑一下这个玩具代码:
my $hashref = {data => "fish"};
my $hashref_copy = $hashref;
$hashref_copy->{data} = "chips";
print "$hashref->{data}\n";
Run Code Online (Sandbox Code Playgroud)
如果$hashref_copy真的是一个独立的副本,我希望这个代码打印"鱼".相反,它打印"芯片".
所以要么1)我误解了一些事情,或者2)Perl被打破了.我很确定它不是#2,尽管我的自我会让我想到.
我哪里错了?我需要做些什么来使修改$hashref_copy 不会出现在原文中$hashref?
在探讨问题时,我最近assert在Java中发现了关键字.起初,我很兴奋.我还不知道有用的东西!一种更有效的方法来检查输入参数的有效性!耶老师!
但后来我仔细研究了一下,我的热情并没有像一个简单的事实那样"完全被扼杀"而"温和":你可以关闭断言.*
这听起来像是一场噩梦.如果我断言我不希望代码继续输入,如果输入listOfStuff是null,为什么我想要忽略该断言?听起来好像我正在调试一段生产代码,并怀疑listOfStuff可能错误地传递了一个,null但没有看到任何触发该断言的日志文件证据,我不相信listOfStuff实际上已经发送了一个有效值; 我还必须考虑断言可能完全被关闭的可能性.
这假设我是调试代码的人.不熟悉断言的人可能会看到并且(非常合理地)假设如果断言消息没有出现在日志中,则不会出现listOfStuff问题.如果你的第一次遭遇assert是在野外,你甚至会发现它可以完全关闭吗?毕竟,它不像是一个允许你禁用try/catch块的命令行选项.
所有这些都让我想到了我的问题(这是一个问题,而不是一个咆哮的借口!我保证!):
我错过了什么?
是否有一些细微差别使得Java的实现assert比我给它的功劳更有用?在某些情况下,从命令行启用/禁用它的能力实际上是非常有价值的吗?当我设想在生产代码中使用它代替语句时,我是否误解了它if (listOfStuff == null) barf();?
我觉得这里有一些重要的东西,我没有得到.
*好的,从技术上讲,它们实际上是默认关闭的; 你必须不遗余力地打开它们.但是,你仍然可以完全击败他们.
这assert首先是一个调试工具的概念需要很长的路要走,才能使它对我有意义.
我仍然认为应该在生产环境中禁用输入检查非平凡私有方法的概念,因为开发人员认为不可能输入错误.根据我的经验,成熟的生产代码是一种疯狂的,庞大的东西,多年来由具有不同技能的人们开发,其目标是快速变化的不同程度的理智要求.即使糟糕的输入确实是不可能的,从现在起六个月后的一段邋maintenance维护编码也可以改变这一点. 提供的链接gustafc(谢谢!)包括这个例子:
assert interval > 0 && interval <= 1000/MAX_REFRESH_RATE : interval;
禁用如此简单的生产检查让我感到愚蠢乐观.然而,这是编码哲学的差异,而不是破碎的特征.
另外,我绝对可以看到这样的价值:
assert reallyExpensiveSanityCheck(someObject) : someObject;
感谢所有花时间帮助我理解这个功能的人; 这是非常赞赏.
我一直在使用PMD帮助发现我的Java代码中的潜在问题,我一直在寻找它的建议,分为有用的,特殊的和"WTF ?!".
它一直告诉我要做的事情之一就是将final关键字用于字面上我可以附加的每个变量,包括输入参数.对于实际的常数,这似乎是明智的,但对于其他东西,它只是让我感到奇怪,甚至可能适得其反.
挂final在每个变量声明上是否有具体的优点/缺点?
我正在运行Eclipse Kepler,由于某种原因,ctrl-click超链接功能在一个特定的工作空间中不起作用.
我看了这个问题,检查了正确的方框.代码编写得很干净.还有什么可能导致这种行为?这是一个非常有用的功能,我想回来.
(这可能是相关的 - "Mark Occurrences"也没有在那个工作区中工作,甚至认为按下了"Toggle Mark Occurrences"按钮.)
F3 给我一个弹出错误:"打开一个编辑器时出现问题.原因:[我现在正在使用的父项目中的那个]不存在."
ConcurrentModificationException当我迭代一个列表时,我偶尔会得到一个.谷歌搜索告诉我,这可能是因为我在迭代它时在另一个线程中改变该列表并且为了使这个问题消失我应该使用java.util.concurrent.CopyOnWriteArrayList....
......除了我已经是.
显然,我在某个地方做了一些非常愚蠢的事情.
有没有人能够了解一个人如何诱导CopyOnWriteArrayList抛出一个ConcurrentModificationException?如果重要,我正在使用Java 5.
编辑: 由于我正在使用的mutators可能很重要,我正在以两种方式修改此列表:
list.add(0, newElement);)list = list.subList(0, MAX_LIST_SIZE);)那些举起红旗吗?如果是这样,为什么?我的理解是,因为这些操作首先复制了这个东西,所以任何现有的迭代器都会指向未经修改的原始文件,因此不关心.我的知识有洞吗?
编辑2: 导致问题的确切代码仍然有点模糊,但我至少可以发布我看到的异常:
java.util.ConcurrentModificationException
at java.util.concurrent.CopyOnWriteArrayList$COWSubList.checkForComodification(Unknown Source)
at java.util.concurrent.CopyOnWriteArrayList$COWSubList.iterator(Unknown Source)
at....
...它指向我的代码中的for-each循环实例化.
这COWSubList似乎意味着我的呼唤subList是我问题的根源; 我还是想明白为什么.
编辑3: *facepalm*
CopyOnWriteArrayList.subList()返回a List,而不是 a CopyOnWriteArrayList.它返回的清单没有提供任何COWAL保护的隐含义务.这使得subList()像这样使用删除元素非常糟糕的想法.
不确定这是否是我的罪魁祸首,但它是可疑的,无论如何都需要纠正.
我有一些代码没有按照我期望的方式工作,我很感激帮助找出如何让它按照我期望的方式工作.
我想使用子程序来修改输入数组.我想如果我传入对数组的引用,我对它做的任何更改都会反映在调用者的版本中.但它显然不起作用.
my @test_array = qw (zero one two three);
shift_array(\@test_array);
print "POST SUBROUTINE: $test_array[0]\n";
sub shift_array {
my @array = @{(shift)};
shift @array;
print "AFTER SHIFT IN SUB: $array[0]\n";
}
Run Code Online (Sandbox Code Playgroud)
这打印:
AFTER SHIFT IN SUB: one POST SUBROUTINE: zero
我预计它会打印one两次.
所以我的问题是双重的:
1)为什么它不像我认为的那样表现?传递对数组的引用是否会创建数组的副本?
2)我如何得到我期望的行为?II如何获得一个子程序从输入数组的调用者副本前面滑出一个或多个元素?
提前感谢您提供的任何见解.
我是PHP的新手,我正在找出实现某些数据库访问代码的最佳方法.我正在尝试创建一些简单的数据库访问对象 - 每个表都有自己的类,每个类的实例代表表中的一行,你知道这个钻取.
我的代码似乎有效,但我在网上看到的一些内容让我担心我的方法可能会以某种方式出错.因为"我可以这样做吗?" 并且"我应该这样做吗?" 是两个不同的问题,我希望一些PHP兽医可以插入.
我当前的策略是创建一个包含所有公共代码的基类抽象Table类,然后让每个表示单个表的类扩展它.
我主要担心的是这段代码:
abstract class Table {
protected abstract static function get_fields();
protected abstract static function get_primary_key();
protected abstract static function get_table_name();
Run Code Online (Sandbox Code Playgroud)
这个想法是每个实现类将定义字段名称,主键,表名等,然后Table类将使用这些函数来填充特定的空格,如下所示:
static function insert($values) {
$field_list = array();
$value_list = array();
foreach (static::get_fields() as $field_name) {
if (isset($values[$field_name])) {
$field_list[] = $field_name;
$value_list[] = self::escape($values[$field_name]);
}
}
$field_string = join(", ", $field_list);
$value_string = "'" . join("', '", $value_list) . "'";
$sql = "insert into " . static::get_table_name() . " ($field_string) values ($value_string)"; …Run Code Online (Sandbox Code Playgroud) 我有一个网络应用程序触发了Safari中似乎是一个iOS8错误,我正在寻找线索,了解它的设置和如何解决它.
该错误的特点是"此网页出现问题,因此重新加载"是在用户花了足够的时间在Safari中导航后出现在页面顶部的.看起来有些事情在幕后崩溃,而Safari只是做得非常好,可以优雅地恢复.阅读崩溃日志显示:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 JavaScriptCore 0x2d4291d4 0x2d24a000 + 1962452
1 JavaScriptCore 0x2d50e166 0x2d24a000 + 2900326
2 JavaScriptCore 0x2d2bc88c 0x2d24a000 + 469132
...
Run Code Online (Sandbox Code Playgroud)
研究暗示的实例translate3d,并keyframe在CSS文件可能是罪魁祸首.虽然摆脱它们似乎使虫子不太可能复发,但虫子仍然存在.同样,减少与最有可能触发错误的页面相关联的(非常非常大的)CSS文件的大小似乎有所帮助,但不会让它消失.
我的公司处理了一堆针对移动优化的面向商务的Web应用程序,这是唯一一个似乎与这个bug相冲突的应用程序; 我不知道是什么让这个特殊的应用程序如此愤怒的小特殊雪花,但我想弄清楚并纠正它.有没有人对可能触发错误的内容以及我们如何解决它有任何想法?