Spring留档指出:
“如果最后两段代码实际上存在于同一个应用程序中,那么可以删除两个RowMapper匿名内部类中存在的重复,并将其提取到单个类(通常是静态内部类)中,然后根据需要由DAO方法引用。”
本例中的“最后两个片段”是使用两个具有相同逻辑的行映射器映射其调用结果的数据库方法。
我的问题是为什么内部RowMapper类需要是静态的。。。还是一定要这样?我的DAO中有一个自动连接的服务方法,用于查找常量值,如:
//Returns "USA"
lookupService.getCountryForCountryId(1)
在父类中自动安装。
更改我的RowMapper定义:
public static final RowMapper<Order> BASIC_SHALLOW_MAPPER = new RowMapper<Order>() {...}
到
public final RowMapper<Order> BASIC_SHALLOW_MAPPER = new RowMapper<Order>() {
public Order mapRow(ResultSet rs, int rowNum) {
...
lookupService.getCountryForId(rs.getInt("country_id"));
...
}
}
...允许我在行映射器内转换该数据,如上所示。这种方法有什么缺点吗?
行映射器类不必是静态的。但大多数情况下,它不需要访问父类的字段,在这些情况下,将其设置为静态更有效。
问题内容: 在Java中,外部类可以是public,final,default或abstract。为什么不像静态 问题答案: 外部类已经是隐式静态的。 非静态嵌套类(=内部类)意味着内部类隐式对其父类具有引用。 这就是为什么对于嵌套类,您可以区分静态和非静态。对于外部类来说,这是没有意义的。 这是一个了解静态/非静态嵌套类之间的区别的示例。您应该了解为什么在外部类中它没有意义。
问题内容: 虽然无法使用来访问静态字段,但是如果我想记录一些应该是静态的内容(例如,创建的InnerClass对象的数量),则使该字段静态化将很有帮助。那么,为什么 Java禁止内部类中的静态字段/方法呢? 编辑:我知道如何使编译器对静态嵌套类(或静态内部类)感到满意,但是我想知道的是为什么Java禁止从语言设计和内部类(或普通内部类)内部的静态字段/方法实施方面,如果有人对此有更多了解。 问题答
问题内容: 如标题所述,为什么静态嵌套类单例线程安全? 问题答案: 您显示的代码在技术上不是线程安全的。这种狡猾的代码通常会造成混乱。 该代码应如下所示: 在这里,我们在()的静态初始化程序中进行分配,任何以正确 的事前发生 关系访问它的线程都可以看到它。嵌套类没有什么特别的,它只允许使用外部类而无需立即构造单例对象。几乎可以肯定,这是完全 没有意义的,但似乎可以使某些人满意。 和以往一样,[ 可
问题内容: Java教程说,由于内部类与封闭类的实例相关联,所以它(内部类)本身不能定义任何静态成员。 对我来说很有趣,为什么内部类不能声明静态成员,例如某个字段,该内部类的实例可能会与同一内部类的其他实例共享这些成员?这仅仅是Java中必须被视为理所当然的事情的实现吗? 问题答案: 基本上只是一个任意决定。我们没有理由也 不可能 得到支持,但还算不上什么好的理由 来 支持它。只需在外部类中声明静
问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。
问题内容: 在java中内部类和静态内部类有什么不同? 问题答案: 从Java教程: 嵌套类分为两类:静态和非静态。声明为静态的嵌套类简称为静态嵌套类。非静态嵌套类称为内部类。 静态嵌套类使用封闭的类名称访问: 例如,要为静态嵌套类创建一个对象,请使用以下语法: 作为内部类实例的对象存在于外部类实例中。考虑以下类别: InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访