问题标签 [api-design]

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 投票
1 回答
378 浏览

asp.net - ASP.NET 4.0 中的 ViewStateMode - 向后兼容?

是否引入了新的 ViewStateMode 属性以避免破坏现有的 EnableViewState?

在页面级别设置 EnableViewState = false 是否会导致 ViewStateMode 设置被忽略?

PS:stackoverflow中的CW是什么?

0 投票
5 回答
182 浏览

java - 多个操作取决于传递的对象的类型

假设我创建了一个传递对象的方法,并且该方法将根据传递的对象执行操作。我应该如何识别对象?

我曾想过使用类名来识别对象,但这可能不切实际,因为我可以很容易地更改对象的类名,并且在以后的开发过程中会产生头疼的问题。我对吗?

编辑:例如,我有物体球和炸弹。如果我有另一个叫做墙的对象,并且墙有解决与墙碰撞的方法(例如碰撞球和炸弹的坐标),但根据碰撞对象(即球和炸弹)有不同的逻辑

0 投票
3 回答
2411 浏览

java - 仅支持半开范围时如何进行包含范围查询(ala SortedMap.subMap)

SortedMap.subMap

这是 API SortedMap<K,V>.subMap

SortedMap<K,V> subMap(K fromKey, K toKey):返回此地图部分的视图,其键范围从fromKey, 包含 , 到toKey, 不包含。

这种包容性的下限、独占的上限组合(“半开范围”)在 Java 中很普遍,虽然它确实有它的好处,但它也有它的怪癖,我们很快就会看到。

以下代码段说明了 的简单用法subMap

最后一行很重要:7=Seven由于 的排他性上限而被排除在外subMap。现在假设我们实际上需要一个包容性上限,那么我们可以尝试编写一个这样的实用方法:

然后,继续上面的代码片段,我们得到:

需要进行一些关键观察:

  • 好消息是我们不关心值的类型,但是......
  • subMapInclusive假定Integer密钥to + 1工作。
    • 一个通用版本也需要例如Long键是不可能的(请参阅相关问题)
    • 更不用说 for 了,Long我们需要对比Long.MAX_VALUE
    • 数字原始盒装类型的重载ByteCharacter等,作为键,都必须单独编写
    • 需要对 进行特殊检查toInclusive == Integer.MAX_VALUE,因为+1会溢出,并且subMap会抛出IllegalArgumentException: fromKey > toKey
  • 一般来说,这是一个过于丑陋和过于具体的解决方案
    • String钥匙呢?或者一些甚至可能不是的未知类型Comparable<?>

所以问题是:是否有可能编写一个通用subMapInclusive方法,该方法采用SortedMap<K,V>, and K fromKey, K toKey, 并执行包含范围的subMap查询?

相关问题


NavigableMap

应该提到的是,有一个NavigableMap.subMap重载需要两个额外boolean的变量来表示边界是包含还是排除。如果这是在 中提供的SortedMap,那么上面的任何一个都不会被问到。

因此,使用NavigableMap<K,V>for 包含范围查询本来是理想的,但是虽然Collections为(除其他外)提供了实用方法,但SortedMap我们无法享受与NavigableMap.

相关问题


在仅提供独占上限范围查询的 API 上

  • 这是否突出了排他上限范围查询的问题?
  • 过去,当独占上限是唯一可用的功能时,包含范围查询是如何完成的?
0 投票
5 回答
20204 浏览

java - 为什么 Java 不允许在枚举中覆盖 equals(Object)?

我注意到以下代码段...

...不允许用于枚举,因为该方法equals(Object x)定义finalEnum. 为什么会这样?

我想不出任何需要覆盖equals(Object)Enum 的用例。我只是想知道这种行为背后的原因。

0 投票
1 回答
226 浏览

.net - 设计 .NET API 以供将来与 F# 一起使用的提示

我正在设计一个 .NET API 以允许开发人员为3D 模拟足球联赛创建 RoboCup 代理。

我对 API 如何与 C# 代码一起工作感到非常满意,但是我想使用这个项目来提高我的 F# 技能(目前基于阅读而不是练习)。

所以我想问一下,在设计一个供 C# 和 F# 代码使用的 API 时,我应该考虑哪些事情。

一些点。

  • 我相当大量地使用矩阵和向量数学。这些是当前不可变的类/结构。
  • API 目前定义了一些与消费者实现的接口(例如:)IAgent,使用它们的实现实例(例如:)MyAgent来构造其他 API 类(例如:)new Client(myAgent)
  • API 触发事件。
  • API 公开了一些委托类型。
  • API 包括几个枚举。

我想尽快发布 API 的一个版本,并且如果我意识到从 F# 使用它太难的话,我不想在以后对其进行重大更改。任何建议表示赞赏。

0 投票
5 回答
8422 浏览

guava - 为什么 Guava 中的 Iterables.find() 会抛出 NoSuchElementException,而不是返回 null?

我喜欢 Google Guava 并且经常使用它,但我总是发现我在写一种方法。

对我来说,这似乎是一个非常有用的补充Iterables(也Iterators就此而言),所以我想知道为什么它会丢失。此外,虽然我可以看到有一个 throws 方法的意义NoSuchElementException,也许是为了区分找到 null 和没有找到元素,但只有当您使用的谓词是时才会出现这种情况

这似乎不是一个常见的情况。

那么为什么 guava 设计者选择了这种行为,而不是如果找不到就返回 null 呢?

这是 [Iterables.find()][1] 的 javadoc

[1]: http: //google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html#find (java.lang.Iterable, com.google.common.base.谓词)

0 投票
3 回答
60409 浏览

java - 为什么 int num = Integer.getInteger("123") 会抛出 NullPointerException?

以下代码抛出NullPointerException

我的编译器是否调用getIntegernull 因为它是静态的?这没有任何意义!

发生了什么?

0 投票
1 回答
704 浏览

api - 用于创建 API 文档/提案的平台无关工具

有哪些工具可用于开发独立于平台的 API 文档?

我正在设计提议的 API,并希望以结构化且易于编辑的方式编写文档。我看到的很多答案基本上都是“使用内置语言特定的文档工具”,但由于我是从“顶级”设计 API,而不是实现它,所以这不是那么有用。我正在寻找 API 文档的 CMS

我已经看到了一些使用 PBWiki 或 Confluence 的建议,但我不相信普通的 wiki 是最好的选择,尽管版本控制方面很好。

从理论上讲,使用 CCK 构建用于 API 调用和用于读取 API 的视图的 Drupal 构建,但这对于我正在寻找的东西来说有点繁重。

是否有 API 文档管理系统?为 API 编写和管理与平台无关的文档的最佳选择是什么?

我已经看到了与此相关的问题,但还没有一个令人满意的答案。

0 投票
4 回答
95855 浏览

java - 为什么 String.valueOf(null) 会抛出 NullPointerException?

根据文档,该方法String.valueOf(Object obj)返回:

如果参数是null,则字符串等于"null"; 否则,obj.toString()返回 的值。

但是当我尝试这样做时怎么会:

它会抛出 NPE 吗?(不信你自己试试!)

怎么会这样?文件是在骗我吗?这是Java中的主要错误吗?

0 投票
3 回答
178 浏览

java - 哪种设计更好:通用构建器或几种具体方法?

我需要创建一个电子邮件通知服务(作为更大项目的一部分)。

它将用于发送基于 html 模板的几种类型的通知消息。

我可以通过两种方式设计它:

  1. 第一种方式是基于建造者模式。它是通用的(我认为)并且可以处理所有必要的情况。但是对于使用它的人来说不是很方便。典型用法如下所示:

    /li>
  2. 第二种方法是显式地实现所有情况。这意味着使用代码(如下所示)将尽可能简单,但每次我们需要处理任何新案例时,我们都必须修改 API(添加新方法)。

    /li>

哪一个更好?为什么?(如果重要的话,语言是 Java)

谢谢!