小编iro*_*e13的帖子

为什么在Java 8中为接口添加默认方法是一个很好的设计选择,有哪些替代方案

我只是在学习Java,所以我很难获得可能的替代方案以及这样的设计决策的影响.

Java 8 为接口添加了默认方法功能,允许接口具有实现.这允许使用新方法扩展现有接口,而不会破坏客户端,以向后兼容的方式随时间演变接口.但是,给定默认实现,此类扩展有些限制,并且可能使用接口或库方法的现有接口方法来实现.所以我的问题是

  • 为什么要引入这种语言功能?
  • 它支持哪些关键的新功能?(例如分裂器)
  • 还有哪些其他替代方案可以支持这些语言功能?例如,为什么不创建一个扩展Iterable的新接口SplitIterable?
  • 实施这些替代方案会产生什么影响(接口的宣传?)
  • 当可以将其作为其他方法的组合实现时,我是否应该为第一版接口中的方法提供默认实现?

java oop interface java-8

19
推荐指数
1
解决办法
4279
查看次数

使用MSTest Framework测试面向.NET Standard 1.6及更高版本的应用程序

我正在将我的项目从.NETFramework 4.5.1 迁移到.NET Standard 1.6

该项目正在使用MSTest框架,我现在想保持这种方式并避免在另一个框架(XUnit,NUnit等)中重写测试

目前,仅针对.NET Core宣布了MSTest框架支持,并且很自然地dotnet-test-mstest 1.1.2-preview ,NuGet提供软件包不支持.NET Standard,因此我不能让我的测试项目以.NET Standard为目标

但是,根据兼容性矩阵,.NET Standard 1.6与.NET Core 1.0兼容.
所以我的测试程序集针对.NET Core 1.0并引用了我的面向.NET Standard 1.6的测试系统 - 它运行得很好.

问题是 - 这是一个很好的决定吗?

我还没有找到任何MSTest的路线图,我想知道当我迁移到.NET Standard 2.0时这个技巧是否仍然可行?
我应该将我的测试框架更改为其他具有更多最新支持的测试框架,例如XUnit吗?

即使Microsoft 文档指向 XUnit,他们是否放弃了MSTest?

请注意,这不是重复,因为我的问题是关于未来的前景,而不仅仅是当前的事态.

.net unit-testing mstest .net-core .net-standard

7
推荐指数
1
解决办法
3050
查看次数

JavaScript数组,堆栈,队列 - 这个特定API设计背后的动机是什么?

在我的日常工作中,我主要使用C#,偶尔只使用javascript,所以请,javascript大师不要粗略地判断我的问题!

  1. Array通过提供pushpop方法实现Stack ,但是peek缺少,为什么?(是的,它实现起来很简单,但仍然)
  2. 数组实现了队列,但操作被命名为push- shiftunshift- pop代替enqueuedequeue,为什么命名它们不同?这是受Python和Ruby的启发吗?
  3. 为什么将Array,Stack和Queue的API合并到一个对象中,而不是隔离接口并为此设置不同的对象?是因为实施便宜吗?
  4. 在语义上,在许多语言(C#,C++,Java)中,Array是内存中的连续块,并且不具有可调整大小.另一方面,允许容易地添加元素的基本集合是List(ArrayList或LinkedList等).如果在javascript中将Array命名为List会不会更好?
  5. 如何在引擎盖下实现Array?我在哪里可以找到非常详细的描述?

javascript arrays data-structures

7
推荐指数
1
解决办法
413
查看次数

为什么HashSet <T>类不用于实现Enumerable.Distinct

我需要访问IEnumerable.Distinct大O表示法 的渐近时间和空间复杂度

所以我在看扩展方法的实现,Enumerable.Distinct我看到它是使用和内部类实现的Set<T>,这几乎是一个带有"开放寻址"的哈希表的经典实现

很快引起注意的是,很多代码Set<T>只是一个复制粘贴HashSet<T>,有一些遗漏

但是,这种简化的Set<T>实现有一些明显的缺陷,例如Resize不使用素数作为插槽大小的方法,就像HashSet<T>看到的那样,请参阅HashHelpers.ExpandPrime

所以,我的问题是:

  1. 这里代码重复的原因是什么,为什么不坚持DRY原则?特别是考虑到这两个类都在同一个程序集中System.Core
  2. 它看起来HashSet<T>会表现得更好,所以我应该避免使用Distinct扩展方法,并编写我自己的扩展方法,HashSet<T>而不是使用Set<T>

.net c# linq big-o hashset

2
推荐指数
1
解决办法
263
查看次数