polymorphism 相关问题

在计算机科学中,多态性是一种编程语言特性,它允许以统一的方式处理不同数据类型的值。

如何在 Java 中使用泛型类型参数内的附加边界进行强制转换

是否可以转换一个对象来适应既是泛型类型参数又具有多个边界的参数? 我的情况如下: 公开 是否可以转换一个对象来适应既是泛型类型参数又具有多个边界的参数? 我的情况是这样的: public <T extends TypeA & TypeB> void problematic(Class<T> class) { doSomething(); } public void myMethod(Object obj) { if (obj instanceof TypeA && obj instanceof TypeB) { problematic(obj.getClass()) } } 如果我有一个实现这两个接口的特定类,有问题的方法就可以正常工作。 问题是这一次,我只有一个对象可以使用,并且必须对其进行强制转换以满足编译器的要求。 有问题的方法已经被经常使用,我不想改变它。 我已经尝试过以下演员: problematic(obj.getClass()) problematic((Class<TypeA & TypeB>) obj.getClass()) problematic((Class<? extends TypeA & TypeB>) obj.getClass()) problematic((Class<?>) obj.getClass()) problematic((Class<(TypeA & TypeB)>) obj.getClass()) problematic((Class<TypeC>) obj.getClass()) TypeC 实现了 TypeA 和 TypeB,但该对象并未实际实现 TypeC,因此编译时它只是在运行时失败 原始类型 经过大量的试验和错误,我找到了使用原始类型的解决方案: problematic((Class) obj.getClass()) 这将给出 rawtypes 警告,但它有效,并且由于事先检查了强制转换,因此向强制转换添加 @SuppressWarnings("rawtypes") 没有真正的问题。 不过,这看起来更像是一种解决方法,我想知道为什么声明像 Class 这样的东西不是一个选项。

回答 1 投票 0

基类指针调用派生类中虚拟的非虚基函数

我正在学习C++虚函数。我在基类中声明了一个非虚函数,在派生类中声明了与虚函数相同的函数。如果我使用派生对象创建基类指针并调用

回答 1 投票 0

如何鼓励未使用的抽象基类的去虚拟化?

我有一个浅层类层次结构(底部的最小可重现代码示例),其中我使用抽象基类来保存一堆相关类之间的大部分通用逻辑,并带有一个 virt...

回答 1 投票 0

C# 类继承和多态字段的多态性

我偶尔会遇到类的设计问题,主要是在一些视频游戏中。当扩展另一个类(例如 Player)的类具有同时也是 c 的字段时,就会出现问题...

回答 1 投票 0

Scala:对多态类型的单例实例不使用 Nothing

给定多态性特征,例如 特征 Transform[T] { def apply( t: T ) : T } 人们可能想实现各种专门的实例,例如 案例类 Add[Double] 扩展 Transform[Double]...

回答 2 投票 0

为什么当类型参数之一应该为 Nothing 时,Scala 的隐式类不起作用?

更新:我修改了示例,以便可以编译和测试。 我有一个定义丰富方法的隐式类: case 类 Pipe[-I,+O,+R](f: I => (O, R)); 对象管道{ //

回答 1 投票 0

重写java中的静态方法

类人类{ 私有字符串名称; 私有整数年龄; 公共人类(字符串名称,整数年龄){ this.name = 名称; this.age = 年龄; } 公共静态无效消息(){

回答 2 投票 0

序列化时可以自定义和缩短多态类型鉴别器属性名称和值吗?

是否可以在序列化/反序列化期间缩短类型鉴别器属性名称和值?我无权访问类型本身,所以在我的情况下,应该通过配置来完成

回答 2 投票 0

对JAVA中的多态和静态绑定感到困惑

我对java还是很陌生。所以我一边玩java一边阅读多态性和静态绑定。我来这里是为了澄清我的思考过程是否正确。 A类{ 无效 foo(A a) {...

回答 1 投票 0

如何让operator=像operator+一样接受参数的导数?

我不明白为什么 a = b 不像operator+ 那样打印出operator= 5 的值(这似乎允许导数)。为什么它这样做而不是允许衍生品,我怎样才能使它成为......

回答 1 投票 0

C++ OOP:如何避免类型切换?

背景 我正在编写一个自定义表达式评估器以进一步了解它的工作原理。我目前正处于标记化的第一阶段。 我之前在

回答 1 投票 0

多态性和简洁架构

我对干净的建筑比较陌生,我遇到了存在主义的怀疑。 在多态性的情况下,干净的架构是否期望将每个实现视为具有自己的实体

回答 1 投票 0

重写抽象成员时如何强制使用 override 关键字?

TypeScript 编译器提供 noImplicitOverride 设置,如果设置为 true,则在覆盖非抽象成员时将强制使用 override 关键字。例如: 抽象类A { 公开

回答 1 投票 0

导轨 |使用嵌套属性作为多态关联的外部类型?

在Rails中,我想构建我的模型,以便主记录(我们称之为Shipment)有一个详细记录(基本类型:ShipmentDetail),它是多态的,这样数据的结构...

回答 1 投票 0

为什么 Iterator<Item = T> 和 Iterator<Item = &T> 的实现会发生冲突?

此代码无法编译: 酒吧特质 ToVec { fn to_vec(self) -> Vec; } 为 I 实现 ToVec 在哪里 我:迭代器, { fn to_vec(self) ...

回答 4 投票 0

避免在基于构造函数输入的类成员函数中使用 if 语句?

我正在寻找优化我拥有的一些光线追踪代码的方法。假设我有以下 Triangle 类,如下所示(为简洁起见,进行了简化): 三角形类 { 民众: 三角形(Ve...

回答 1 投票 0

我说所有Java对象都是多态的,这样正确吗?

既然所有Java类都继承自超类Object,那么我们是否可以断定所有Java对象都是多态的?

回答 2 投票 0

Swift:结果的失败类型不能是协议 - “类型'any ShadowError'不能符合错误”

错误是一种协议,人们能够做到这一点...... 让 x: 结果 = .success(()) ShadowError 符合 Error 并且也是一种协议,但人们无法做到这一点...... 协议

回答 2 投票 0

使用 System.Text.Json 序列化期间出现 StackOverflowException

我不明白为什么下面的代码在写入期间抛出 StackOverflowException。我希望能够使用类型鉴别器来帮助我序列化/反序列化对象,同时不丢失

回答 1 投票 0

使用接口和抽象类的多态性

抽象类 B 扩展 A 实现 C { // 为什么我必须在这里添加 add() 函数的实现 } A类{ 无效添加(){ } } 接口C{ 无效添加(); } 我期待...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.