问题标签 [upcasting]

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 投票
2 回答
438 浏览

java - Java 传递变量 - 向下转换

我有一个功能,例如

helloworld(list<object> names)

我有以下代码:

现在,如果我想newMe传入helloworld(newMe);. 这是不可能的,因为我正在向下铸造。我该如何克服这个问题?我是否将我的列表向下转换为(对象)然后尝试向上转换它?还有其他方法吗?将不胜感激一个例子。

谢谢

0 投票
5 回答
378 浏览

java - 字符串到对象类型转换 - 区别

有什么区别。

当我们说每个对象都扩展Object class时,为什么A a = toBeCast;不允许,但这Object object = toBeCast;很好用。

0 投票
1 回答
271 浏览

c++ - SFINAE 是否适用于功能体?

我有以下示例代码:

现场样品

基于重载决议规则,非模板版本应该是首选,因为基类是 type Serializable。但是,我希望 SFINAE 在模板版本中在为重载解析实例化时出现错误时启动(因为如果没有为类型定义 >> 运算符,则不应考虑它)。

为什么即使模板不会被使用它仍然失败?

0 投票
2 回答
601 浏览

java - 关于向上转换和重载方法的困惑

假设我们有这两个类和一个主要方法:

为什么第二次调用的结果Sub: f(double d)Sub: f(float f)第一次不同?

当我添加

Super班级,输出变为Sub: f(float f)

鉴于这种行为,我希望工作流程如下所示:

  1. 如上a图所示,检查Super该类Super是否有匹配的方法
  2. public void f(double d)找到,因此将浮点数转换为双精度
  3. 现在可以看到并执行public void f(double d)更具体的类中的方法Sub

这个对吗?

0 投票
1 回答
115 浏览

f# - 此表达式应具有 IDataReader 类型,但此处具有 SqlDataReader 类型

以下代码SqlDataReadergetReaderIDataReader. 我究竟做错了什么?Seq.unfold

0 投票
3 回答
125 浏览

c - C 什么时候不需要地址运算符?

在 C 中,除了不需要地址运算符的数组之外,还有其他时间吗?例如,我知道这段代码需要操作符的地址:

但是这段代码不需要地址操作符:

这里memset声明为:

在 C 中,它会自动将其char[]转换为void*- 但尝试对这样的做同样的foo_t事情:

不起作用,并且会产生预期的编译时类型错误。与char[]示例一样,如果我们使用数组,它将起作用:

它会再次自动foo_t[]void*

这是C语言中唯一一次发生这种类型的转换吗?我怎么知道这些演员何时会发生?

0 投票
1 回答
185 浏览

python - Python C++ 绑定类型向上转换问题

我有一个 C++ 代码,它依赖于一个大型库(具体来说是 OpenBabel),并使用它的一些类作为我的类的基础。这个库有自己的使用 SWIG 创建的 Python 绑定。我已经使用 SWIG 为我的代码构建了 Python 绑定,并使用此库接口的“%import”。在将我的类传递给 Python 代码中的库例程时,这很好用。但是,我在从库的例程中检索我的类时遇到问题。

为了澄清这个想法,我将展示一些代码。对于 C++ 版本

现在我想在 Python 中做同样的事情:

这会导致错误:AttributeError: 'Base' object has no attribute 'toString'

print(d)结果,<Library.Base; proxy of <Swig Object of type 'std::vector< Library::Base * >::value_type' at 0x7f0ff8279a20> >所以这是 C++ 的包装器Base*

我找到了关于向上转换的建议:d.__class__ = Derived,但这对我来说看起来很奇怪。而且,它不起作用。

那么我应该如何在 Python 中向上转型,或者我做错了什么?

0 投票
1 回答
471 浏览

java - 我可以将子类实例传递给接受超类实例的方法吗

我有一个类似的设置。当我尝试使用 java Reflections 调用execRequest方法并在parameterArray中传递DelRequest的子类实例时,我得到一个 NoSuchMethodFound 异常

我有很少的服务方法和之间,然后最终我调用以下代码行。请注意,这次我通过 req定义的超类实例是方法签名public String execRequest(Request request)

这是我的基本设置,请指出我错在哪里,是否可以完成

0 投票
2 回答
64 浏览

c# - 相同类型实例的动态向上转换数组

鉴于此 linqpad 代码:

将这些项目转换IEnumerables为实际派生类型的最有效方法是什么?

我有一个带有签名的方法,DoStuffToArray<T>(IEnumerable<T> items)
我需要为列表中的每种不同类型动态调用一次i。这是一个需要使用派生类型调用的库方法,而不是接口。

我已经设法使用这种方法获得了两个类型化的数组,有没有更好的方法?

0 投票
3 回答
156 浏览

c# - C#向上转型/多态问题

我相信这个问题是相当基本的,但我很难找到这个问题的答案。在 C# 中,假设我有 3 个类:A, B, C

B 派生自 A

C 派生自 B

现在,如果我想要一个 A 类对象的列表或数组,但希望该数组能够容纳 B 和 C 类型的对象,这没问题……我可以这样做:

但是,假设我创建了这个 C 类型数组的第一个元素。如果 C 类型在其类定义中定义了一个仅存在于 C 类的类定义中的变量……我如何从数组中访问该变量?我不能这样做A[0].MyVariableGetter,因为基类 A 中不存在该变量。

有什么建议么?