问题标签 [polymorphism]

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 投票
5 回答
12132 浏览

java - 我应该如何转换具有多个边界的 Java 泛型?

是否可以将 Java 中的对象转换为组合的泛型类型?

我有这样的方法:

如果我有一个实现两个接口(Foo & Bar)的类,调用这个方法是没有问题的。

问题是当我需要调用此方法时,我需要传递给它的对象被接收为java.lang.Object,我需要对其进行强制转换以使编译器满意。但我不知道如何制作这个演员表。

编辑:

问题在于这样的函数:

}

0 投票
3 回答
8458 浏览

.net - 托管 C++ 中未解析的令牌

我手上有一个谜。我正在尝试学习来自 C# 背景的托管 C++,但遇到了障碍。如果我的项目包含两个类,一个基类Soup和一个派生类TomatoSoup,我将其编译为静态库 (.lib),我会在Soup中的虚拟方法上获得未解析的标记。这是代码:


Abstracts.proj

汤.h

番茄汤.h

番茄汤.cpp

主项目

主文件


我在Main.proj上收到此链接时错误:

  1. 我试过设置

    /li>
  2. 我尝试在基类中实现热量

    并将未引用的形式参数警告视为错误。

  3. 我已经在 Soup 类上尝试了 1 和 2 有和没有 abstract 关键字

这个问题让我发疯了,我希望能防止它在未来让其他开发人员发疯。

更新:当在头文件中实现 TomatoSoup::heat 时,这与 Greg Hewgill 的参数名称注释方法一起使用,但是当我将实现移动到 TomatoSoup.cpp 时错误又回来了。我已经修改了问题以反映这一点。

0 投票
9 回答
1995 浏览

c# - 您将如何重构此条件以使用多态性?

我刚刚在 YouTube 上观看了关于从代码中删除语句并改用多态性 的 Google 干净代码视频(参见链接,第一篇文章) 。if

看完视频看了看视频之前写的一些代码,发现有些地方可以使用这种方法,主要是同一种逻辑多次实现的地方。举个例子:

我有一些这样的代码。

RunTableInfoCommand 的作用并不重要,但主要是我有许多具有完全相同if语句的属性,唯一改变的是 TableInfoEnum。

我想知道是否有人可以帮助我重构它,以便它仍然做同样的事情但没有任何if声明?

0 投票
2 回答
257 浏览

c# - 这对多态性来说是一个很好的例子吗

抱歉,如果这是一个非常基本的问题,但我正在努力解决我应该如何解决这个问题。我正在尝试为 OLE 对象包装一些命令,基本规范如下所示:

[] 之间的任何内容都是可选的。

所以我需要创建一个类,让我们称之为“ CommandBuilder ”,它可以为所有这些可选的设置器设置方法,我可以处理它,我遇到的主要问题是需要输出一个字符串的 ToCommandString 方法看起来像:

当设置的变量并不复杂或只有几个变量但存在大量变量和/或嵌套值也是可选的时,只需根据设置的变量执行一些 if 并加入字符串即可,如果有任何变化,它会使 ToString 方法变得非常长和复杂 + 难以维护。

我想知道是否可以通过使用多态性来解决这个问题。

然后我在“ CommandBuilder ”中设置的所有方法都可以创建正确的命令类型并将其添加到列表中,然后“ CommandBuilder ”方法中的主ToString可以循环遍历所有已设置并调用ToCommandString,无需担心做任何 if 语句或空检查。

这是解决这个问题的正确方法吗?

PS如果您需要更多信息,我很乐意补充,只是不想让它先走太久。

0 投票
11 回答
45029 浏览

oop - 抽象和多态有什么区别

我似乎不太了解两个 OOP 概念。你能解释一下抽象多态是什么,最好用真实的例子和代码吗?

谢谢你。

0 投票
5 回答
13729 浏览

c# - C# 接口(不同项目/程序集中的调用方法)

下面的代码几乎总结了我想要实现的目标。

我们有一个包含许多不同项目的解决方案,但是我们需要能够从未引用的项目中调用项目中的方法(会导致循环引用)。

我已经发布了以前的问题,下面的代码几乎就是我使用接口提出的。我仍然不知道如何调用驻留在未引用的不同项目中的方法。

我无法创建接口的实例,它必须是一个类。但是如何创建未引用的类的实例。我不想为此使用反射。

代码是 C# 2.0

任何帮助表示赞赏。

我需要在“GeneralMethod”(Class Raise)中放置什么代码才能在“Listen”类中执行“Update”方法?

我可能应该澄清需要这样做的动机。也许有更好的方法......

我们有一个baseform,所有其他项目都可以从中引用。作为示例,我们在加载项目时(从基础表单)将包含各种设置的对象传递给项目。

例如,如果设置对象有一些变量更改(设置对象填充在 baseform 中),我们希望加载的项目侦听此更改并获取新的设置对象。

因为 baseform 引用了所有其他项目,我们需要让项目“监听”baseform 中的事件。

清如泥:-)

0 投票
1 回答
249 浏览

c# - 你将如何解决这个多态性字符串构建问题

抱歉,标题没有那么明显,如果有人想更改它,请继续。另请注意,我已经问过一个关于这种事情的问题,但这个问题更多的是关于你将如何攻击它,因为我的攻击似乎感觉不对。

我在构建一个字符串以使用另一个问题中的多态方法以正确的顺序发送到 OLE 对象时遇到问题。

OLE 对象只能接受和接收一个字符串,所以我正在做的是围绕所有常用命令构建一个包装器,并为它们提供更多的 .NET 感觉。

我很快遇到的问题是我的包装器必须发送的一些命令很长并且具有可选位,然后突然将一个只设置名称的方法变成了一个大字符串构建方法,if's just to set a name当然,这种情况无处不在,因为有很多命令。

现在,为了拥有一个好的包装器,我希望能够包装字符串构建过程,以便将字符串构建逻辑从包装器本身移到构建器对象中。
我试图通过使用多态性来解决这个问题,当我有一个专门为构建一种类型的命令字符串而设计的构建器对象类时效果很好。有关详细信息,请参阅其他帖子。

对不起,我现在要切入正题。

主要问题是必须构建大量命令字符串,这意味着更多的构建器对象
所以我真的很想有一个通用的字符串构建器,它可以从任何命令列表构建一个字符串,但问题是即使用户以错误的顺序设置它们,它们也必须按正确的顺序排列。

你会如何处理这个问题?

0 投票
2 回答
2032 浏览

ruby-on-rails - RoR: has_one “或其他”?(或者,没有继承的多态性。)

大家好,我的项目有一些有趣的要求。我需要一种has_one关系,它要么是一个类,要么是另一个类,但没有继承。如果这是唯一的方法,我可以摆脱继承,但是两个关联记录具有完全不同的数据并且根本不相关。

我需要弄清楚的是以下内容。

WhereFoo有一个赋值,类型为Baror Baz; 它们只共享一个公共列,所以也许我可以从中创建一个父对象。但是,如果我让它们继承自一个通用对象(当它们包含的数据确实是橙子和苹果时)我必须为记录制作一个表吗?如果记录是抽象记录,但孩子们不是,我可以侥幸逃脱吗?

我想现在你可以看到我的困难了。我对 RoR 很陌生,但到目前为止我很喜欢它。我敢肯定有办法解决这个问题,但如果我无法弄清楚它是什么,我会被诅咒的。

0 投票
6 回答
5990 浏览

oop - 我们应该总是支持多态而不是枚举吗?

看完:干净的代码谈——继承、多态性和测试

我检查了我的代码,发现一些 switch 语句可以重构为多态,但我也注意到我只使用带有枚举的 switch 语句。这是否意味着枚举在 OO 设计中是“邪恶的”并且应该用多态性来消除?

0 投票
7 回答
14454 浏览

java - 将超类作为参数传递给期望子类的方法

我有一个看起来像的对象树

我有两种方法:

在另一堂课上,我想做以下事情:

其中 myBall 是 Ball 类型。并让它根据子类型调用正确的方法。显然我不能这样做......这些论点不适用。

有谁知道我怎样才能实现我想要的?或者如果有一个好的解决方法

谢谢

编辑:我正在尝试构建的应用程序是板球记分卡类型的东西。因此,根据保龄球的类型,其他各种元素应该改变。

我的初衷是能够从某种形式的 UI 中指定球的类型和得分,然后从 BallFactory 创建一个适当的类型球,然后例如当我向球队得分发送一个无球时,它会将值添加到球队得分,但也将值添加到无球计数器。但是,当我将同一个球交给击球手分析来处理它时,击球手总得分应该只有 1 分。

我希望这不是太糟糕的解释我的初衷。