假设我正在迭代Java中的Map ...我不清楚在迭代过程中我能对Map进行什么操作.我想我在Javadoc中对Iterator接口删除方法的这个警告大多感到困惑:
[...]如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为.
我确信我可以毫无问题地调用remove方法.但是在迭代Map集合时,我可以:
使用Map类put方法更改与键关联的值(使用现有键放置)?
使用Map类put方法添加一个新条目(使用新密钥放置)?
使用Map类删除方法删除条目?
我的猜测是我可以安全地做#1(放到现有密钥)但不安全做#2或#3.
提前感谢您对此的任何澄清.
Steve Yegge 在他的博客文章中描述了属性模式.
对于使用C#或Java等静态语言的人来说,这种方法有哪些优点和缺点?在什么样的项目中你想要使用属性模式,什么时候你想避免它?
我们的项目是使用RAD 7.0在WAS 6.1/hibernate/struts上开发的中型Web应用程序,后者已投入生产.目前,我们已经在hibernate配置文件中的属性文件和数据库架构详细信息中硬编码了生产系统的IP地址.
我们的客户希望我们提出将环境细节保留在EAR旁边的解决方案,以便他们可以在打开EAR时更改环境/数据库详细信息.
任何指针都会非常有用.谢谢.
我有一个使用Spring的项目,并分解为几十个DAO和相关的DTO.我正在使用JdbcTemplate,但没有其他,因为它正是我很满意的抽象级别.
我目前正在我的DTO上执行延迟加载,在其getter中放置一些相当毛茸茸的代码.
基本样板逻辑是:1.如果field不为null,则返回其值并退出2.联系相应的DAO并获取相关的DTO 3.将它们存储到下一次.
它工作正常,除了我的低DTO与一大堆DAO耦合,并不是那么POJOey.
如果我将逻辑放在DAO中会出现另一个代码气味,因为它将为其DTO和延迟加载处理CRUD,并且据我所知它对象应该只有一个责任.
我希望有一个相对简单的Spring方法,我可以使用它在DAO和DTO之间注入一个Lazy Loader对象来实现这一点,但任何其他解决方案都适用于我.
有任何想法吗?
每当我想要替换一段文本时,我总是要做以下事情:
"(?P<start>some_pattern)(?P<replace>foo)(?P<end>end)"
Run Code Online (Sandbox Code Playgroud)
然后将该start
组与新数据连接起来replace
,然后将该end
组连接起来.
有更好的方法吗?
我现在有大约7个Javascript文件(感谢各种jQuery插件)和4-5个CSS文件.我很好奇处理这些问题的最佳做法是什么,包括文档中应该加载哪些内容?YSlow告诉我,Javascript文件应该 - 如果可能 - 最后包括在内.身体的尽头?它提到了分隔符似乎是他们是否写内容.我所有的Javascript文件都是函数和jQuery代码(所有这些都在ready()时完成)所以应该没问题.
那么我应该包含一个CSS和一个Javascript文件,并包含其余的?我应该将所有文件连接成一个吗?我应该在文档的最末端放置Javascript我的标签吗?
编辑: FWIW是的,这是PHP.
我正在重构一个有效的ASP.NET Web应用程序,以使用ASP.NET Web Service公开Web服务接口.根据Web服务身份验证 - 最佳实践,基本身份验证通过https是可行的方法.让我们假设它是,而不是做WS-Security,X509等.
在.NET 3.5/VS 2008上,实现自定义http基本身份验证(非Windows帐户)的最简单方法是什么,例如,只接受用户名为"foo"且密码为"bar"的情况.最终,我想要Thread.CurrentPrincipal
设定.
我是自己编写HttpModule
还是可以更简单?
我有一个PHP脚本,它读取大型CSV并执行某些操作,但前提是"用户名"字段是唯一的.CSV用于多个脚本,因此将输入从CSV更改为仅包含唯一用户名不是一种选择.
最基本的程序流程(我想知道)是这样的:
$allUsernames = array();
while($row = fgetcsv($fp)) {
$username = $row[0];
if (in_array($username, $allUsernames)) continue;
$allUsernames[] = $username;
// process this row
}
Run Code Online (Sandbox Code Playgroud)
由于这个CSV实际上可能非常大,所以这in_array
一点让我思考.在数组中搜索成员时最理想的情况是它是否已经排序,那么如何从头开始构建数组,保持它的顺序?一旦它按顺序排列,是否有更有效的搜索方式而不是使用in_array()
,考虑到它可能不知道数组是否已排序?
例如select * from table limit 0,5
,最多返回5行,或者
必须找到5行,如果row_count不等于5,则返回空结果集?
如果查询是select * from table limit 5
什么?
我目前正在修改一个有9种不同构造函数的类.总的来说,我认为这个类的设计非常糟糕...所以我想知道如果一个类有这么多构造函数的设计是不好的.
出现了一个问题,因为我最近在这个类中添加了两个构造函数,试图重构和重新设计一个类(下面代码中的SomeManager),这样它就是单元可测试的,并且不依赖于它的每个方法都是静态的.但是,因为其他构造函数在类的开头以下方便地隐藏了大约一百行,所以当我添加构造函数时,我没有发现它们.
现在发生的是调用这些其他构造函数的代码依赖于已经实例化的SomeManager类,因为它曾经是静态的......结果是一个空引用异常.
所以我的问题是如何解决这个问题?通过尝试减少构造函数的数量?通过使所有现有构造函数采用ISomeManager参数?
当然一个班级不需要9个构造函数!...哦,最重要的是这个文件中有6000行代码!
这是我正在讨论的构造函数的审查表示:
public MyManager()
: this(new SomeManager()){} //this one I added
public MyManager(ISomeManager someManager) //this one I added
{
this.someManager = someManager;
}
public MyManager(int id)
: this(GetSomeClass(id)) {}
public MyManager(SomeClass someClass)
: this(someClass, DateTime.Now){}
public MyManager(SomeClass someClass, DateTime someDate)
{
if (someClass != null)
myHelper = new MyHelper(someOtherClass, someDate, "some param");
}
public MyManager(SomeOtherClass someOtherClass)
: this(someOtherClass, DateTime.Now){}
public MyManager(SomeOtherClass someOtherClass, DateTime someDate)
{
myHelper = new MyHelper(someOtherClass, someDate, "some param");
}
public MyManager(YetAnotherClass yetAnotherClass) …
Run Code Online (Sandbox Code Playgroud) java ×2
php ×2
.net-3.5 ×1
arrays ×1
asp.net ×1
class-design ×1
constructor ×1
css ×1
hibernate ×1
html ×1
iterator ×1
java-ee ×1
javascript ×1
jdbc ×1
jquery ×1
lazy-loading ×1
limit ×1
mysql ×1
python ×1
regex ×1
security ×1
sorting ×1
spring ×1
web-services ×1