我对 JIT 编译器感到困惑,
Josh Block的Effective Java(使用私有构造函数或枚举器强制执行Singleton属性)的第3项提到"虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方式."
例:
public enum Elvis {
INSTANCE;
private final String[] favoriteSongs =
{ "Hound Dog", "Heartbreak Hotel" };
public void printFavorites() {
System.out.println(Arrays.toString(favoriteSongs));
}
}
Run Code Online (Sandbox Code Playgroud)
接下来:"这种方法在功能上等同于公共领域方法,除了它更简洁,免费提供序列化机制,并提供防止多个实例化的铁定保证,即使面对复杂的序列化或反射攻击."
我看到的最大的负面影响是:不是枚举不应该具有可变状态吗?使用具有状态的Singleton似乎很常见.
因此,自出版日期(2008年第2版)以来,这种模式实际上变得更加普遍吗?
我需要一些帮助,为'if-condition'编写一个宏,只有在#define指令定义了DEBUG标志时才会编译.
这是一个说明我想要的例子.第一段代码显示了使用#ifdef编写if条件的常用方法.
#ifdef DEBUG
if( rv == false )
{
string errorStr = "error in return value" ;
cout << errorStr << endl ;
throw( Exception(errorStr) ) ;
}
Run Code Online (Sandbox Code Playgroud)
我想以类似下面的方式编写它:
DEBUG_IF( rv==false )
{
same code as above
}
Run Code Online (Sandbox Code Playgroud)
它似乎很简单,但我无法定义一个可以做到这一点的宏.如果有人以前经历过这种情况,请帮忙.
谢谢.
假设我有一些代码可以执行一些浮点运算并将值存储在双精度数中.由于某些值无法以二进制形式完美表示,如何在合理程度的确定性下测试相等性?
我如何确定"合理"是什么意思?
可以double.Epsilon用某种方式吗?
更新
几件事.正如@ ho1所指出的那样,文档double.Epsilon指出,当比较两个双精度表示相等时,你可能想要一个远大于epsilon的值.以下是文档中的相关段落:
由于其最低有效位数的差异,两个明显等效的浮点数可能无法相等.例如,C#表达式(double)1/3 ==(double)0.33333,不比较相等,因为左侧的除法运算具有最大精度,而右侧的常量仅精确到指定的数字.如果创建一个自定义算法来确定是否可以将两个浮点数视为相等,则必须使用大于Epsilon常量的值来确定两个值相等的可接受的绝对差值.(通常,差异的差异比Epsilon大很多倍.) - http://msdn.microsoft.com/en-us/library/system.double.epsilon.aspx
......但问题是,多少倍?
如果它会影响你的答案,我的特殊情况涉及几何计算(例如使用点和向量的点积和交叉积).在某些情况下,您会根据是否A == B,A > B或者得出不同的结论A < B,因此我正在寻找一个关于如何确定等价窗口大小的良好经验法则.
我是jQuery的新手,如果这是一个愚蠢的问题,我道歉.
当我使用它时使用id找到一个元素,我知道总是一个匹配,为了访问它我会使用索引[0].有没有更好的方法呢?例如
var gridHeader = $("#grid_GridHeader")[0];
Run Code Online (Sandbox Code Playgroud) 在FF中,这会隐藏所有div,然后显示从'#rule_rule_type'菜单中选择的id,这是预期的行为.在IE 8中,它不会隐藏所有div id:
<script type="text/javascript" charset="utf-8">
(function($){
$('#rule_rule_type').change(function() {
$('#allowed_senders, #blocked_senders, #blocked_character_set, #custom').hide();
var id = $(this).val();
$('#' + id).show();
});
})(jQuery);
</script>
Run Code Online (Sandbox Code Playgroud)
但是,这可以在IE 8中运行:
<script type="text/javascript" charset="utf-8">
(function($){
$('#rule_rule_type').change(function() {
$('#allowed_senders').hide();
$('#blocked_senders').hide();
$('#blocked_character_set').hide();
$('#custom').hide();
var id = $(this).val();
$('#' + id).show();
});
})(jQuery);
</script>
Run Code Online (Sandbox Code Playgroud)
这很麻烦.如何清理它以使其更简洁并仍在IE 8中工作?
谢谢,
Chip Castle
http://invoicethat.com
或者我应该问为什么对我这么难?答案可能是我是iPhone开发的新手,我正试图抛弃我的旧方法并进入未来的新平台.从开始到结束,我对这个过程有几个疑问......
CGImageCreateWithPNGDataProvider辅助方法的示例,但表示iOS SDK不支持它.我想使用CGImageRef重复将图像绘制到位图上下文.非常感谢,我为这个冗长的问题道歉,我感到惊讶的是,与其他一些平台相比,这是一个令人费解的过程.
我正在Safari for iPad上创建一个网站.我需要阻止双击事件的缩放,但我有两个问题:
<meta name = "viewport" content = "user-scalable = no">"......如果我这样做,用户就永远无法放大我的页面.我该如何解决这些问题?
我有一个强名称程序集,安装到特定文件夹(而不是GAC).
Reflector中显示的名称是:
"Foo.Bar.TreeFrog, Version=1.2.1.0, Culture=neutral, PublicKeyToken=ac88c4a8b22089b4"
Run Code Online (Sandbox Code Playgroud)
以及安装它的路径
"c:\\QueueBall"
Run Code Online (Sandbox Code Playgroud)
我可以使用Assembly.Load或Assembly.LoadFrom加载它,如果是这样的话?
我能否确保强大的命名得到尊重,即我正在加载的DLL真的是我期待的那个而不是同名的冒名顶替者?