在方法调用中传递当前对象是好还是坏? 如: public class Bar{ public Bar(){} public void foo(Baz baz){ // modify some values of baz } } public class Baz{ //constructor omitted public void method(){ Bar bar = new Bar(); bar.foo(this); } } 具体来说就是bar.foo(this)可以接受的吗?
有没有办法在eclipse控制台中对部分日志着色。 我知道我可以发送错误和标准的stream和颜色他们不同,但我更加注意在ANSI转义代码行(或任何其他的,HTML?),我可以embedded颜色的string中,使其着色日志。 它肯定会帮助使重要的一点脱颖而出,而不是采取奇怪的布局,而是保持布局的log4j设置 这里是我正在寻找的一个例子: [信息]网格完整……. 错误 大胆的部分是蓝色的,这种着色可以通过应用程序来控制。 像这样(标签是概念性的和任意的,但你明白了): log.info(String.format(“网格完成……. <blue> %s </blue> ”,isComplete)); 在更一般的说明中,可以在日志中embedded元信息以帮助呈现这些日志。 就像我们标记网页内容以帮助CSS显示信息一样。
我了解Java,现在我正在学习Objective-C。 Java接口和Objective-C协议究竟有什么不同?
JPA (Java持久性API)规范有两种不同的方式来指定实体组合键: @IdClass和@EmbeddedId 。 我在我的映射实体上使用了两个注释,但是对于不太熟悉JPA人来说却是一个大混乱。 我只想采用一种方法来指定组合键。 哪一个真的是最好的? 为什么?
JDBC兼容的应用程序应该在哪里存储它的SQL语句,为什么? 到目前为止,我设法确定了这些选项: 硬编码在业务对象 embedded在SQLJ子句中 封装在单独的类中,例如数据访问对象 元数据驱动(将对象模式与数据模式分离 – 描述元数据之间的映射) 外部文件(例如属性或资源文件) 存储过程 每个人有什么“优点”和“缺点”? SQL代码应该被视为“代码”还是“元数据”? 存储过程应该只用于性能优化还是数据库结构的合法抽象? 性能是决定的关键因素? 供应商locking呢? 有什么更好的 – 松耦合或紧耦合,为什么? 编辑:谢谢大家的答案 – 这里是一个总结: 元数据驱动即对象关系映射(ORM) 优点: 非常抽象的 – 数据库服务器可以切换而不需要改变模型 广泛传播 – 实际上是一个标准 切断所需的SQL数量 可以将SQL存储在资源文件中 performance(通常)是可以接受的 元数据驱动的方法 (数据库)厂商独立性 缺点: 隐藏SQL和真正的开发人员的意图 SQL很难被DBA审查/更改 SQL可能仍然需要奇数的情况 可以强制使用专有查询语言,如HQL 不适合优化(抽象) 缺乏参照完整性 替代缺乏SQL知识或在数据库中的代码缺乏谨慎 永远不要匹配本地数据库的性能(即使它接近) 模型代码与数据库模型紧密结合 硬编码/封装在DAO层 优点: SQL保存在访问数据的对象(封装) SQL很容易编写(开发速度) 当需要更改时,SQL很容易追踪到 简单的解决scheme(没有凌乱的架构) 缺点: SQL不能由DBA查看/更改 SQL很可能成为DB特定的 SQL可能变得难以维护 存储过程 […]
Java中Collections.singletonList()的用法是什么? (据我所知,它返回一个元素列表,为什么我想要一个单独的方法来做到这一点?在这里,不变性是如何起作用的?) 这种方法有没有特别有用的用例,而不仅仅是一个方便的方法?
正如JEP 280所写: 将由javac生成的静态String -concatenation字节码序列更改为对JDK库函数使用invokedynamic调用。 这将使未来优化String连接,而不需要进一步修改由javac提供的字节码。 在这里,我想了解invokedynamic调用的用法,以及字节码级联与invokedynamic不同之处是什么?
这些代码语句是否相同? 他们之间有什么区别? private void calculateArea() throws Exception { ….do something } private void calculateArea() { try { ….do something } catch (Exception e) { showException(e); } }
我有一个性能相关的问题关于使用StringBuilder。 在一个非常长的循环中,我操纵一个StringBuilder并将其传递给另一个方法,如下所示: for (loop condition) { StringBuilder sb = new StringBuilder(); sb.append("some string"); . . . sb.append(anotherString); . . . passToMethod(sb.toString()); } 在每个循环周期实例化StringBuilder是一个很好的解决scheme吗? 而是更好地调用删除,如下所示? StringBuilder sb = new StringBuilder(); for (loop condition) { sb.delete(0, sb.length); sb.append("some string"); . . . sb.append(anotherString); . . . passToMethod(sb.toString()); }
我有一个集成testing套件。 我有一个IntegrationTestBase类,用于扩展我所有的testing。 这个基类有一个@Before ( public void setUp() )和@After ( public void tearDown() )方法来build立API和数据库连接。 我一直在做的就是覆盖每个testing用例中的这两个方法,并调用super.setUp()和super.tearDown() 。 然而,如果有人忘记叫超级或把它们放在错误的地方,抛出exception,并忘记在最后或者其他地方调用super,那么这可能会导致问题。 我想要做的是在基类final的setUp和tearDown方法,然后添加我们自己的注释@Before和@After方法。 做一些初始testing,它总是按照这个顺序调用: Base @Before Test @Before Test Test @After Base @After 但我只是有点担心,顺序不能保证,可能会导致问题。 我环顾四周,没有看到有关这个问题的任何事情。 有谁知道我是否可以做到这一点,没有任何问题? 码: public class IntegrationTestBase { @Before public final void setUp() { *always called 1st?* } @After public final void tearDown() { *always called last?* } […]