问题标签 [default-implementation]
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.
swift - 您如何区分已实现协议的静态方法?
对于实例函数,强制转换工作得很好。
swift - swift 扩展默认实现是否在编译或运行时解决?
我想知道有没有办法以多态风格使用协议默认实现。例子
我希望 Metal() 打印“Metal”,而 Grunge 打印“Grunge”。但似乎默认实现是在编译时而不是运行时解决的。我的假设是对的吗?我怎么能得到预期的行为?
swift - 当协议具有关联类型时,从常规方法调用协议默认实现
我有一个协议,它有一个带有默认参数的静态方法。我想更改实现协议的类中的默认值。本质上是在做类和超级容易做的事情。
当协议没有关联类型时,我只有一个解决方案。
以下代码有效,但一旦您取消注释关联的类型声明,它就不会编译。
我明白为什么它不能编译:Protocol
没有具体的类型AssociatedType
。
所以也许这个问题应该是“我可以明确地专门化一个协议吗?”,我相信答案是否定的。
我有一个部分解决方法。但即使它有效,它也很糟糕。
尤其是当您考虑我正在编写一个sayHello
公开的库时,因此以下解决方法迫使我拥有第二个协议,该协议必须是公开的,但没有用。
这是解决方法:
但这对我不起作用,因为我sayHello
使用关联类型。所以它不能被提取到另一个协议。
只是为了确保我清楚,这就是我想要的,只是用类代替协议:
swift - 覆盖协议定义变量的 setter 并使用协议默认实现中的 getter
我有一个带有单个变量的协议
为此我实现了一个默认的getter:
现在我让几个类符合这个协议。在这些类中,我想覆盖localizationKey
's setter 但对其 getter 使用默认实现,例如:
(我怎样才能做到这一点?
java-8 - 开放封闭原则与默认实现
Java 8 引入了接口默认实现的概念?这不违反开放封闭原则吗,因为基于https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html上的示例,您似乎可以随时打开界面以添加新功能?
xml - 在spring xml配置文件中覆盖列表或其他集合的默认实现
我观察到spring xml中list的默认实现是ArrayList。
我试过了:
此列表上的 getClass() 方法返回 java.util.ArrayList。
是否有任何属性或方式可以覆盖列表的默认实现(可能是 LinkedList 或我想要的任何列表)或任何其他集合(如 map、set 等)?
types - 所有 trait 对象的默认 trait 方法实现
我有一个 trait MyTrait
,我希望所有的 trait 对象&MyTrait
都可以相互比较,而不是其他任何东西。我现在基于如何测试特征对象之间的相等性?.
问题是我需要在MyTraitComparable
任何地方使用,而不是MyTrait
. 有没有办法解决这个问题?
我尝试移动as_any
并equals
提供MyTrait
默认实现,但是
- 我认为我不能
self
在那种情况下使用,所以它不起作用。 - 如果我使用
trait MyTrait: PartialEq
,那么我将无法再创建特征对象。
rust - 编译器可以对 trait 的方法进行默认实现的内联吗?
我知道特征的方法没有主体,所以没有什么可以内联的。但是这样标记它的默认实现有什么意义吗?
#[inline]
在实现类型的特征时,我是否需要重写整个方法体并标记这个 impl 的方法,而不是像上面那样只标记特征的方法?
ios - Swift 协议、关联类型、自我和默认实现的问题
我试图通过我无法确定的默认实现来获得一些功能。考虑下面的代码,它是我正在尝试做的事情的简化,但尽可能简单地捕获了问题。
我有一个协议,UIView 的某些方法的默认实现,以及 UILabel 的特定实现。
我的问题是最后一部分......所有这些功能的实际使用
我发现自己在不断地generateObject()
跟着做configure(data: <something>)
。所以我尝试执行以下操作:
添加static func generateObjectAndConfigure(data: Data) -> Self
到协议中。当我尝试为此方法为 UIView 进行默认实现时,问题就出现了。我收到以下错误
Method 'generateObjectAndConfigure(data:)' in non-final class 'UILabel' cannot be implemented in a protocol extension because it returns
自己and has associated type requirements
基本上,我不能有一个返回Self
和使用关联类型的方法。总是连续调用这两种方法对我来说真的很讨厌。我只想configure(Data)
为每个班级声明并generateObjectAndConfigure(Data)
免费获得。
有什么建议么?
java - 为什么默认方法在 Java 8 中包含接口,而不是在 Collection Framework 中添加额外的接口?
通常,一旦发布到生产环境中,接口就会被冻结。
因此,如果您需要添加功能,您在 Java 中的选择是将现有接口扩展为新接口,该接口描述了添加的功能。
这确保了向后兼容性,即您不会破坏原始接口中指定的约定,并且您可以自由地实现新接口以向您描述具有附加功能的特定类的新版本。
然而,在 Java 8 中,接口中引入了默认方法实现,允许在现有接口中指定附加方法以确保向后兼容性。但是,我不明白为什么你会选择这个选项而不是前一个选项 - 这样做会在创建质量差的代码方面出现严重错误。
有人可以详细说明一下吗?