问题标签 [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.
java - 解决这种铸件行为的最干净的方法
想象一下,我有一个包含 50 个不同类型的 Node 子类的列表,我希望它们是相同的类型,否则会得到 ClassException。我有一个接收这个列表的方法和一个持有和 expeting 某种类型的节点
我想做这样的事情:
但避免这样做:
如果我不能转换为泛型,那么做这样的事情会很棒:
所有这些选项都考虑了node.addElement(E节点),所以期待E。我想改变它以接受任何类型的节点并进行演员表。但后来发生了这样的事情:为什么 List<type> 在编译和执行时吸收非类型元素?
我应该放弃第二种方法吗?
java - 我怎样才能降级到 E 类,或者至少在没有警告的情况下以安全的方式做到这一点?
我有超抽象类 Node 和 50 种类型的子类 SubNode。
我有一个通用类 <E extends Node> 它有一个私有 var List<E> 和一个不幸的是必须接受超类 Node ALWAYS 的方法,不能将它移动到 E:
任何解决方案(反射?)能够在没有警告的情况下编译,抛出 CastException 而不是由于类型擦除而添加任何对象??...
我不想为任何类型的子类编写相同的函数:
有这样的方法真是太好了。
或者
java - 向下转换异常
我做了这个代码:
拉拉是母班。
Oyeha是延伸Lala的孩子。
但是当我运行这段代码时,我得到了错误:
java.lang.ClassCastException: $Proxy201
我找不到我的错误在哪里。有人可以帮我解决这个问题吗?谢谢你。:)
c++ - 使用 *void 作为 static_cast 的缓冲区
所以我这样做:
我想将一个vectC转换成一个vecA。
所以我使用 void 指针作为缓冲区和强制转换:
这是有效的吗?还有另一种方法吗?
c++ - C++ 继承向下转型
我的基类如下:
如何从点对象转换为子点对象?我已经尝试了以下所有三种方法:
这些演员阵容有什么问题?
c# - 有没有更简单/更好的方法来做到这一点,因为 C# 中不允许向下转换?”
可能是一个有争议的话题,但是......我真的很讨厌我不能做以下事情:
相反,我使用如下内容:
它更加冗长,每当我向用户添加字段时,我都需要确保将它们复制到 UserUI 构造函数中。
公平地说,允许向下转换会使所有这一切变得更容易,更不容易出错吗?
java - 从超类向下转换:链表中的节点到 SpecialNode
我正在使用 Node 实现一个单链表,其中每个节点都知道它的正确邻居。我创建了一个列表:节点 n1-> 节点 n2-> 节点 n3。创建列表后,它只包含 Node 类型的元素。现在我想告诉 Node n2 是一个 SpecialNode,以便提供一个 specialLabel。在向下转换之后,列表应该看起来像节点 n1-> SpecialNode n2-> 节点 n3。如何才能做到这一点?
(请注意,n2 不知道它的左邻居。请注意,我必须在创建列表后告诉 n2 是特殊的,因此在将其初始化为超类的节点之后,因为我需要在决定哪个节点之前进行一些计算要特别。)
c# - MongoDB BsonDocument 向下转换
我在 MongoDB 中有一个集合,我正在尝试使用 C# 驱动程序“FindAndModify”。该集合包含基类及其派生类的类型,如下所示:
当我尝试将 BsonDocument 转换为我的基类时,在 FindAndModify 之后,结果是“Son”:
我得到以下异常:
System.IO.FileFormatException:元素“SomeProperty”与父亲类的任何字段或属性都不匹配。
知道为什么吗?- 我不能在这里进行向下投射吗?
谢谢,尼尔。
c# - 将基类转换为派生类
在 C# 中是否可以将基类对象显式转换为其派生类之一?目前认为我必须为我的派生类创建一个构造函数,该构造函数接受基类对象作为参数并复制属性值。我真的不喜欢这个想法,所以如果可能的话,我想避免它。
这似乎不应该工作(对象被实例化为新基,因此不应为派生类的额外成员分配内存)但 C# 似乎允许我这样做:
c++ - 在几何库中分离算法和数据(需要三次调度?)
我在设计处理几何的应用程序部分时遇到问题。特别是,我希望有一个层次结构的类和交叉的单独方法。
问题
层次结构将是这样的:
- 几何学
- 网
- 参数
- 盒子
- 领域
相交方法类似于:
这很简单。现在问题出现了,当我想将所有几何图形一起存储在一个结构中时,例如一个std::vector
(或 KD-Tree,或其他)。
为此,我需要使用std::vector<Geometry*>
. 但是,从这个向量中读取会得到Geometry*
对象,因此我无法调用适当的交集函数。
问题示例:
如果我在几何对象中实现算法,问题可以通过访问者和一些非常奇怪的函数调用弹跳来解决。
但是,我想将交集算法保留在几何类之外。原因是:
避免决定哪个应该拥有所有权(例如,你在哪里实现盒子和球体之间的交集,在
Box
还是在Sphere
?)为了避免使几何对象混乱,可以对几何做所有的事情,这是相当多的(仅举几例:体素化它,计算交叉点,应用构造几何运算符......)。因此,在这里将逻辑与数据分离是非常可取的。
另一方面,我需要有一个层次结构而不是模板,因为对于某些事情,可以抽象出特定的几何图形......(例如,将其存储在 astd::vector
或 KD-Tree 或......)。
你会如何解决这个问题?有没有适合这个的设计模式?我尝试查看一些库,但最终我更加困惑,我已经...
最简单的方法(有时使用)是使用 RTTI(或伪造它)和向下转换,但这并不完全可维护......(添加新几何意味着通过所有代码更改大量 switch 语句)。
有什么想法吗?
非常感谢你提前。