Java 为什么在C+中向下转换是一种不好的做法+;而不是用另一种语言? 我曾经问过一个关于如何设计一个C++代码的问题(这里可以找到),人们告诉我,向下浇铸被认为是一个很糟糕的练习,除了非常具体的场景。
然而,我在C#和Java中看到了许多代码,它们似乎是一种完全自然的做事方式。例如,在Android SDK中,有一个函数返回一个视图,然后向下转换为其实际类:Java 为什么在C+中向下转换是一种不好的做法+;而不是用另一种语言? 我曾经问过一个关于如何设计一个C++代码的问题(这里可以找到),人们告诉我,向下浇铸被认为是一个很糟糕的练习,除了非常具体的场景。,java,c#,c++,downcast,Java,C#,C++,Downcast,然而,我在C#和Java中看到了许多代码,它们似乎是一种完全自然的做事方式。例如,在Android SDK中,有一个函数返回一个视图,然后向下转换为其实际类: TextView tv = (TextView) this.findViewById( R.id.myTextView ); 为什么在C++中不需要这样做,而不是用其他语言? 我知道C++和java都支持内省,而不是C++,它需要一种类型字段,但最终是相同的,不是吗?< /P> < P>在其他解释语言中,类型检查是在JVM等解释程序中完
TextView tv = (TextView) this.findViewById( R.id.myTextView );
为什么在C++中不需要这样做,而不是用其他语言?
我知道C++和java都支持内省,而不是C++,它需要一种类型字段,但最终是相同的,不是吗?< /P> < P>在其他解释语言中,类型检查是在JVM等解释程序中完成的。在C++中,您必须手动进行类型检查。 在其他解释器语言中,类型检查是在JVM等解释器中完成的。在C++中,您必须手动进行类型检查。 至少有两个非常不同的原因,所有这些都很重要:
由于这些原因,除非你绝对需要,否则在C++中使用<代码>动态DistaCase<代码>是不好的。
< P>至少有两个非常不同的原因,它们都是重要的:由于这些原因,除非你绝对需要,否则在C++中使用<代码>动态DistaCase<代码>是不好的。
< P>在C++中使用相同的成语,其中API处理程序,并通过<代码>空白> >代码>或>代码>长>代码>将其存储到API对象的实例中。在WINAPI,<代码> RegisterClass < /C>前者的典型例子,后者是代码> SET/GETWOLDOWPRPTR <代码>。这些是您提到的“非常具体的场景”,它适用于托管语言和C++两者。一般来说,静态类型的语言回避向下编译,因为它将类型检查从编译运行到运行时间。< P>在C++中使用相同的成语,其中API处理程序,并将<代码>空白> /COD>或<代码>长<代码>,或者用API对象的实例存储这样的变量。在WINAPI,<代码> RegisterClass < /C> >是一个类型。前者的CAL示例,后者的代码> SET/GETWOLDOWPRPTR <代码>。这些是您提到的“非常具体的场景”,它适用于托管语言和C++两者。
一般来说,静态类型语言避免向下转换,因为它将类型检查从编译时转移到运行时。为什么一些随机仇恨者想要结束这个完全合法的问题?是什么让你认为在其他语言中向下转换是好的?这个问题似乎是从一个不受支持的前提开始的。@chi:我知道OP在哪里了NG从我的确有人警告C++中的向下压缩,但是在其他语言中很少有。@我假设Android的人不是初学者,知道什么是好的或坏的实践,并且从他们设计的API的方式推断出它是java中的合法。@ ViuS721你怎么能说下去?在java中,铸造不是床上练习吗?如果你说的是正确的,那么