问题标签 [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 投票
6 回答
1748 浏览

java - Java中的强制向下转换

我想对一个不能被向下投射的对象强制进行向下转换,并且想知道正确的方法是什么。用例是我有一个检查的规则列表以及生成失败规则列表的内容。失败的规则是规则的子类。但是像
FailedRule failedRule = (FailedRule) rule;

将失败,因为规则对象不是 FailedRule 的实例

为了解决这个问题,我实例化了一个克隆;
FailedRule failedRule = new FailedRule (规则);

我的 FailedRule 类看起来像这样

有没有更简单的方法来做到这一点?回答我自己,设计有缺陷,代码应该是:

0 投票
3 回答
4645 浏览

java - 检测对象类型然后相应地转换它?

我的方法将一个对象作为输入。我如何确定它的类型,然后相应地转换它?

例如:binarySearch( Object o );

在 binarySearch 方法中,我需要一种方法来确定 Object o 的类型(或类)。然后我需要用那种类型来投射它。我该怎么做???

更具体地说,对象 o 是基类的子类(EG SalariedEmp 是 Employee 的子类),我特别需要基类。

编辑:我想出了如何做我想做的事,这真的应该是一个完全不同的问题。我需要使用 .compareTo 方法Comparable来设置一种方法来根据来自这些对象的私有数据来比较两个对象。我所要做的就是使用implements关键字将我的类实现为“Comparable”。因此,无论在我的 binarySearch 方法中比较什么类型的对象,如果它们是相同(未知)类型并且实现了 Comparable,它就可以工作。这使得我的 binarySearch 方法非常可用于任何类型的可比较类。

因此,公平地说,我会接受涵盖原始问题的答案。

:)

0 投票
2 回答
612 浏览

c# - C# 向下转换问题

在以下情况下是否有效且合法并向下投:

还是使用组合/聚合更好?

0 投票
4 回答
17943 浏览

c++ - C++ dynamic_cast - 多态要求和向下转换

在下面的代码中,obj在案例 1 中构造的同时,我们也构造了一个derived类对象,但是它的成员函数是无法访问的obj。因此,在向下转换时(即,在情况 2 中),使用obj作为源,我们已经在其中构建derived了。为什么obj需要是多态的?

如果我对上面的描述感到困惑,为什么obj在向上转换时不需要是多态的,但是在向下转换时它在使用时确实需要是多态的dynamic_cast

0 投票
4 回答
285 浏览

c++ - 在 C++ 中使用类层次结构时是否应该避免向下转换?

假设我正在编写一个适用于项目的应用程序,并根据项目的类型公开不同的功能。我有不同类型项目的类层次结构:

现在,我打算将 AbstractProject *_currentProject 指针作为应用程序主类中的成员,在启动时弹出一个对话框并根据选择执行以下操作:

稍后,我将不得不向下转换指向特定类型的指针,以利用特定于不同 Project-s 的功能。不知怎的,这让我感到不安。有没有更好的方法来做到这一点?

0 投票
3 回答
489 浏览

c++ - C++ - 更快地向下转换树节点的子节点?

我有一个简单的层次结构树结构,其基类 Node 表示一个节点。一个节点可以是另一种特定类型(子类化)。

我有几个子类Node

假设我知道一个教师节点的所有子节点都是DepartmentNode类型,为了节省开发人员的工作,我打算做类似的事情

但这需要O(n),并且每次调用时都会创建新的向量对象。

有没有更好的方法来做到这一点?

0 投票
4 回答
1756 浏览

java - 您可以在不声明新变量的情况下在 java 中向下转换对象吗?

我试图做类似的事情

我声明变量

但是如果我调用 xyz.method(),我只能调用 O 类的方法,而不是 E 的方法,所以我可以通过

我的问题是——你能在不声明新变量的情况下做到这一点吗?就像是:

现在我可以使用 xyz.method() 来调用 E 的方法

有没有办法在java中做到这一点?

0 投票
2 回答
88 浏览

java - 向下转换的对象指向哪里?

我的问题:

为什么h.n之后仍然打印 7 h = (Horse) ah?赋值后它应该指向同一个对象,ah并且 n 字段指向 5?

0 投票
4 回答
760 浏览

c# - 在不失表现力的情况下从通用风格中脱颖而出

我有这样的事情:

注意:在这种情况下不接受覆盖

由于大量使用反射,在某些情况下我不得不沮丧Something<T>Something但我想因为Cases属性是隐藏的,所以我正在丢失Cases数据。

我该如何规避这种情况?我试过使用where T:object,但这也不被接受。

编辑:这是为什么我需要继承的一个例子:

但是,因为“案例”是隐藏的,所以它将始终为空。如果没有继承,我将不得不用所有可能的通用参数编写一个 BIG if-then-else。而且,相信我,我确实必须使用someVar is SomethingReflection来构造所有这些对象。这是一个大型通用 API 正在转换为其他大型通用 API,因此它们不应该相互认识,并且转换应该尽可能透明。

0 投票
4 回答
8936 浏览

c# - 在 C# 中向下转换对象列表

如何向下转换对象列表,以便列表中的每个对象都向下转换为派生类的对象?

这就是场景。

我有一个带有List基本项目的基类,以及从它继承的两个类:

这个想法是不必复制构建项目列表所需的代码。有我需要的BaseItem所有基本东西,我总是可以向下转换BaseItem到派生项目之一。

当我有它们的列表时,问题就出现了。Listof是在BaseItem中声明的,BaseClass因为所有派生类都必须拥有它。但是在运行时访问它时,我似乎无法向下转换为派生类。