问题标签 [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.
java - Java 传递变量 - 向下转换
我有一个功能,例如
helloworld(list<object> names)
我有以下代码:
现在,如果我想newMe
传入helloworld(newMe);
. 这是不可能的,因为我正在向下铸造。我该如何克服这个问题?我是否将我的列表向下转换为(对象)然后尝试向上转换它?还有其他方法吗?将不胜感激一个例子。
谢谢
java - 字符串到对象类型转换 - 区别
有什么区别。
当我们说每个对象都扩展Object class
时,为什么A a = toBeCast;
不允许,但这Object object = toBeCast;
很好用。
c++ - SFINAE 是否适用于功能体?
我有以下示例代码:
(现场样品)
基于重载决议规则,非模板版本应该是首选,因为基类是 type Serializable
。但是,我希望 SFINAE 在模板版本中在为重载解析实例化时出现错误时启动(因为如果没有为类型定义 >> 运算符,则不应考虑它)。
为什么即使模板不会被使用它仍然失败?
java - 关于向上转换和重载方法的困惑
假设我们有这两个类和一个主要方法:
为什么第二次调用的结果Sub: f(double d)
和Sub: f(float f)
第一次不同?
当我添加
到Super
班级,输出变为Sub: f(float f)
。
鉴于这种行为,我希望工作流程如下所示:
- 如上
a
图所示,检查Super
该类Super
是否有匹配的方法 - 仅
public void f(double d)
找到,因此将浮点数转换为双精度 - 现在可以看到并执行
public void f(double d)
更具体的类中的方法Sub
这个对吗?
f# - 此表达式应具有 IDataReader 类型,但此处具有 SqlDataReader 类型
以下代码SqlDataReader
在getReader
对IDataReader
. 我究竟做错了什么?Seq.unfold
c - C 什么时候不需要地址运算符?
在 C 中,除了不需要地址运算符的数组之外,还有其他时间吗?例如,我知道这段代码需要操作符的地址:
但是这段代码不需要地址操作符:
这里memset
声明为:
在 C 中,它会自动将其char[]
转换为void*
- 但尝试对这样的做同样的foo_t
事情:
不起作用,并且会产生预期的编译时类型错误。与char[]
示例一样,如果我们使用数组,它将起作用:
它会再次自动foo_t[]
将void*
这是C语言中唯一一次发生这种类型的转换吗?我怎么知道这些演员何时会发生?
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 中向上转型,或者我做错了什么?
java - 我可以将子类实例传递给接受超类实例的方法吗
我有一个类似的设置。当我尝试使用 java Reflections 调用execRequest方法并在parameterArray中传递DelRequest的子类实例时,我得到一个 NoSuchMethodFound 异常
我有很少的服务方法和之间,然后最终我调用以下代码行。请注意,这次我通过 req定义的超类实例是方法签名public String execRequest(Request request)
这是我的基本设置,请指出我错在哪里,是否可以完成
c# - 相同类型实例的动态向上转换数组
鉴于此 linqpad 代码:
将这些项目转换IEnumerables
为实际派生类型的最有效方法是什么?
我有一个带有签名的方法,DoStuffToArray<T>(IEnumerable<T> items)
我需要为列表中的每种不同类型动态调用一次i
。这是一个需要使用派生类型调用的库方法,而不是接口。
我已经设法使用这种方法获得了两个类型化的数组,有没有更好的方法?
c# - C#向上转型/多态问题
我相信这个问题是相当基本的,但我很难找到这个问题的答案。在 C# 中,假设我有 3 个类:A, B, C
B 派生自 A
C 派生自 B
现在,如果我想要一个 A 类对象的列表或数组,但希望该数组能够容纳 B 和 C 类型的对象,这没问题……我可以这样做:
但是,假设我创建了这个 C 类型数组的第一个元素。如果 C 类型在其类定义中定义了一个仅存在于 C 类的类定义中的变量……我如何从数组中访问该变量?我不能这样做A[0].MyVariableGetter
,因为基类 A 中不存在该变量。
有什么建议么?