Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中类的转换接口_Java_Interface_Casting - Fatal编程技术网

Java中类的转换接口

Java中类的转换接口,java,interface,casting,Java,Interface,Casting,在Java中,有一个方法有一个参数,这个参数就是一个接口。使用这种方法,我可以对一个具体的类进行强制转换吗 我如何计算该演员表演的成本 示例-将接口转换为类: public void convertToClass(IUser iu) { User u = (User) iu; } 正如在评论中所说的,实际上这不是性能问题,而是表达意图的问题:如果您需要特定的类,那么您应该需要它,而不是接口。但是,通常情况下,您可以需要一个接口,然后通过该接口进行操作,而完全

在Java中,有一个方法有一个参数,这个参数就是一个接口。使用这种方法,我可以对一个具体的类进行强制转换吗

我如何计算该演员表演的成本

示例-将接口转换为类:

public void convertToClass(IUser iu) {          
        User u = (User) iu;
}

正如在评论中所说的,实际上这不是性能问题,而是表达意图的问题:如果您需要特定的类,那么您应该需要它,而不是接口。但是,通常情况下,您可以需要一个接口,然后通过该接口进行操作,而完全忽略强制转换。这也是通常应该做的事情。你应该探索这种可能性


至于实际问题:cast有一些开销,但在任何用例中都不重要。开销来自于检查强制转换是否可行,以及如果不可行则抛出异常。如果您有兴趣进一步讨论铸造的开销,您可以阅读更多关于它的内容。如果您不想测量开销,您应该使用

中概述的方法,就像在一篇评论中所说的,实际上这不是性能问题,而是表达您的意图:如果您需要特定的类,您应该需要它,而不是接口。但是,通常情况下,您可以需要一个接口,然后通过该接口进行操作,而完全忽略强制转换。这也是通常应该做的事情。你应该探索这种可能性


至于实际问题:cast有一些开销,但在任何用例中都不重要。开销来自于检查强制转换是否可行,以及如果不可行则抛出异常。如果您有兴趣进一步讨论铸造的开销,您可以阅读更多关于它的内容。如果您不想测量开销,您应该使用

中概述的方法,它与性能没有任何关系。这是一个设计问题。如果您接受
IUser
参数,然后将其强制转换为
User
,则首先不应接受
IUser
作为参数。您应该需要一个
User
参数。@Kayaman-不过也有一个性能方面,因为编译器必须插入
CHECKCAST
操作码。@OliverCharlesworth当然,但这是微观层面的东西。所呈现的代码没有多大意义。Kayamans的评论在很大程度上是正确的,但真正的设计问题是,您需要从
User
访问
IUser
界面未提供的内容。应尽可能避免强制转换,但不是出于性能原因。您应该避免强制转换,因为强制转换会降低代码的类型安全性。强制转换是一种绕过编译器类型检查的方法。Kayaman的建议很重要:如果方法需要
User
对象,则将参数设置为
User
类型,而不是
IUser
。它与性能没有任何关系。这是一个设计问题。如果您接受
IUser
参数,然后将其强制转换为
User
,则首先不应接受
IUser
作为参数。您应该需要一个
User
参数。@Kayaman-不过也有一个性能方面,因为编译器必须插入
CHECKCAST
操作码。@OliverCharlesworth当然,但这是微观层面的东西。所呈现的代码没有多大意义。Kayamans的评论在很大程度上是正确的,但真正的设计问题是,您需要从
User
访问
IUser
界面未提供的内容。应尽可能避免强制转换,但不是出于性能原因。您应该避免强制转换,因为强制转换会降低代码的类型安全性。强制转换是一种绕过编译器类型检查的方法。Kayaman的建议很重要:如果方法需要
User
对象,则将参数设置为
User
类型,而不是
IUser