问题标签 [downcast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
451 浏览

c++ - 在知道具体的子类类型时使用 C 风格的强制转换

在我的项目中,我有一棵不同类型的 QObjects 树。让我给你一个简单的例子,它应该让你明白我在说什么。这可能是一个示例性的 QObject 树(不是继承图,但有点类似于类图),我们从顶部的根对象开始,并在下面列出其子对象:

虽然 QObject 树不一定遵循此规则,但在我的情况下,树中的每个类都有一个特定类型的父级。所以,以一个关系为例,一个房子可以有一些楼层和其他类型的孩子,但一个楼层是房子的孩子,只有房子

现在,如果我将它们建模为 QObject 派生类,则应该通过内部查看它的接口来class Floor给我它的接口。我真的知道这个父级将是 type ,因为我将它设计成这样,并且程序员坚持这个设计。House *house()QObject::parent()House*

如果我用 C 风格强制QObject *parent()转换House*来实现可以House *house() const吗?

Qt 建议使用qobject_cast<House*>(parent())0如果QObject* parent()不继承自则返回House,使强制转换类型安全。但在发布模式下,我想避免这种缓慢的演员阵容。我分析了一种特定的算法,它在执行 C 样式转换而不是 qobject_casts 时执行速度快三倍。这是因为 qobject_cast 在运行时向元对象询问类型信息,因此在经常调用时会导致相当大的速度下降。

所以我最终得到的是:

这将在调试模式下断言父级确实是 House,而在发布模式下仅有效地进行 C 样式转换。

言归正传:我知道当 C++ 程序员进行 C 风格转换时人们会大喊大叫,但在这种情况下可以吗?

另一种解决方案是将特定类型的父指针另外存储为成员变量,但我认为这是多余的,我也喜欢树反映在返回树父的那些方法中。

0 投票
7 回答
2444 浏览

java - 强制向下转换

我知道向下转换是不可行的。但我正在努力解决它。

这就是我所拥有的。

但是在我的应用程序中,我想使用 MyTicket 类,因为我不想强制更改原始 Ticket 对象。因此,当 Ticket 对象从调用(webservice、DB 等)返回时,我尝试向下转换为 MyTicket,但它显然失败了。

所以我试图想办法解决这个问题。我正在考虑编写一个“copyAttributes”方法或复制 MyTicket 类的构造函数中的属性,如下所示:

有没有办法获取一个类的属性并将它们设置到另一个类中?还是有一种完全不同的方式来沮丧而我错过了它?

*解决方案: *所以我采用了下面的解决方案并想出了这个。如果在转移发生之前未找到主票,我需要更改以返回 null:

0 投票
4 回答
227 浏览

c# - 一个向上转换的对象是否可以再次向下转换而不为基类类型的每个派生类类型尝试转换?

我有一个案例,其中给出了一个对象集合,这些对象都派生自同一个基类。如果我遍历集合并检查每个项目的类型,我可以看到该对象是派​​生类型,然后相应地处理它。我想知道的是,除了我已经在做的事情之外,是否还有一种更简单的方法来检查派生类型。通常不需要重复代码,所以我目前的方法对我来说似乎有点不对劲。


我正在使用一个 Web 服务,其中每个 Web 服务都必须具有相同的结果类型。

目标是我们可以根据需要向客户端返回尽可能多的不同类型的消息。与每次 Web 服务调用获取一条消息不同,被调用者可以在一次行程中了解他们所有的错误/成功,并消除从消息中解析特定信息的字符串。

我最初考虑使用泛型,但由于 Web 服务可能具有不同的消息类型,因此该集合被扩展为使用基本消息类。

0 投票
2 回答
1683 浏览

c# - 调用需要在 VB.NET 或 C# 中作为基类类型的派生类实例的方法

我有两个对象——从基础“Obj”派生的“宇宙飞船”和“行星”。我已经定义了几个类——圆形、三角形、矩形等,它们都继承自“形状”类。

出于碰撞检测的目的,我想给 Obj 一个“形状”:

所以在“宇宙飞船”中我可以:

在“星球”中,我可以:

我有一个方法(重载多次)检查不同形状之间的碰撞,例如:

当我使用派生类调用函数时,这很好用,例如:

但是当我使用 MyShape 调用它时,我收到一个错误,因为该方法正在传递一个“Shape”(而不是派生类型),该方法没有重载。

我可以通过执行以下操作来解决它:

但这似乎很混乱。有没有更好的办法?

0 投票
3 回答
2884 浏览

c# - 如何强制对泛型表示失望

鉴于以下代码:

如何解决最后一个编译器错误(从 animalCage 转换为 dogCage)?

在我的代码中,我知道笼子里有一只狗,但我无法找到一种方法来施放它。我是创建转换器并从Cage<Animal>的值创建新的Cage<Dog>实例的独特替代方案吗?

0 投票
1 回答
255 浏览

.net - 从“System.IO.Stream”隐式向下转换为“System.IO.MemoryStream”

问题在于:

我知道 xmlTextWriter.BaseStream 属于流类型,但是我将如何进行类型转换呢?

感谢您在高级的任何帮助!

0 投票
2 回答
145 浏览

java - 从泛型创建类对象

在泛型方法中,我似乎无法在运行时访问该方法的泛型类型(错误:无法从类型变量中选择)。

我这样做的原因是能够安全地降低内容,例如:

我发现了 9 多年前的一个帖子,问题完全相同: https ://forums.oracle.com/forums/thread.jspa?threadID=1184291

在那里,解决这个问题的想法是在构造函数中提供一个 Class 对象,并使用这个变量来检查它是否是可赋值的。这似乎是一个非常愚蠢的解决方案,因为您可以将任何类放在那里,而所有漂亮的类型检查都是无用的......

所以,同样的问题:为什么要<any>.class在构造函数中提供,而在运行时类型<A>是完全已知的?如何访问 的实际类型<A>


找到了一个非常丑陋的解决方案:

因此,现在您必须提供一个Class,但您可以在此处插入的唯一有效类是您的返回类型。但至少现在它是类型安全的。

完全不方便...

0 投票
2 回答
200 浏览

java - 如何使用向上转换或其他方法从子类中获取超类的实现?

例如,我只是想知道如何使用子类来实现超类。

试图向上转换它以获得超类实现但无济于事

如何使用 animal1 对象获取超类实现?

0 投票
5 回答
872 浏览

java - 向下转换是否会抵消 short 的性能/内存优势?

我正在编写一个大型应用程序,我试图在其中尽可能多地节省内存并提高性能。因此,当我知道一个字段的值只会从 0 到 10 或从 -100 到 100 时,我会尝试使用short数据类型而不是int.

然而,这对于其余代码意味着什么,当我调用这些函数时,我必须将简单int的 s 向下转换为shorts。例如:

方法签名

方法调用

在我的代码中都是这样,因为文字被视为ints 并且不会根据函数参数自动向下转换或键入。

因此,一旦发生这种向下转换,任何性能或内存增益实际上是否显着?还是转换过程如此高效以至于我仍然可以获得一些收益?

0 投票
5 回答
1734 浏览

java - 向上转换为对象的 ArrayList,然后向下转换为自定义 ArrayList 的成本

我有一种情况,我从数据库中获取数据,我想将它向上转换到ArrayList of objects然后向下转换到不同的自定义 ArrayList ieList<User>List<Groups>

我的问题是向上转换为对象,然后向下转换为 ArrayList,成本是多少,它是有效的还是好的做法。

已编辑

我不想像等那样获取数据,List<User>, List<Groups>我想ArrayList<objetcs>一次获取数据,然后根据我的需要,我将向下转换数据到ArrayList<User>, ArrayList<Groups>稍后。