【发布时间】:2017-12-30 11:18:35
【问题描述】:
在Java中有一个方法有一个参数,这个参数就是一个接口。使用这种方法我可以对具体类进行强制转换吗?
如何计算这种演员阵容的成本?
示例 - 将接口转换为类:
public void convertToClass(IUser iu) {
User u = (User) iu;
}
【问题讨论】:
-
它与性能没有任何关系。这是一个设计问题。如果您接受
IUser参数,但随后将其转换为User,那么您首先不应该接受IUser作为参数。您应该需要一个User参数。 -
@Kayaman - 不过也有性能方面的问题,因为编译器必须插入
CHECKCAST操作码。 -
@OliverCharlesworth 当然,但那是微观层面的东西。提供的代码实际上并没有多大意义。
-
Kayamans 的评论在很大程度上是正确的,但真正的设计问题是您需要从
User访问一些东西,而IUser接口没有提供这些东西。 -
应尽可能避免强制转换,但不是出于性能原因。您应该避免强制转换,因为强制转换会使您的代码的类型安全性降低。强制转换是一种绕过编译器类型检查的方法。 Kayaman 的建议很重要:如果方法需要
User对象,则使用User类型的参数而不是IUser。