问题标签 [forward-compatibility]

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 投票
0 回答
154 浏览

android - Android框架前向不兼容示例

关于 Android 碎片的报告,我正在研究 Android 框架/SDK 的前向兼容性。

众所周知,Android SDK 是前向兼容的,也就是说,使用一个框架开发的应用程序将在设备上运行,而这些设备运行的是后一个框架,即Android 中的前向或后向兼容性?. 当某个功能或 API 被弃用时,大多数情况下都会在 developer.android.com 上声明,该功能将继续在设备上运行,即Google Maps Android v1

现在,当我在 4.1 上运行 2.2 应用程序时,我遇到了与文本转语音不兼容的情况。此案例是此处的肖像Text to Speech not working in Android 4.2 Jelly Bean。(简而言之,您不应该在使用之前检查 TTS 的可用性,因为从 4.1 开始,设备上存在 TTS 是强制性的。事实上,此检查将在 4.1 上错误地返回 false,因此您的代码为 2.x 编写的,在 4.1 以后无法正常工作。)

当应用程序或其功能之一停止在更高版本上运行时(除了为 1.x 开发的应用程序),还有其他示例吗?在较新的设备上造成问题的特定弃用功能/API 是什么?

0 投票
0 回答
315 浏览

ios - 有没有办法将 UIAlertController 封装在另一个 UIViewController 中?

我对iOS相当陌生,所以请保持答案清楚。我一直在尝试将 UIAlertController 封装在另一个 UIViewController 中,以将其用作 UIActionSheet 的替代品,因为它在 iOS 8 中已被弃用。

这个想法将替代向后和向前兼容的 UIActionSheet,例如,将其称为 ImmortalActionSheet。

如果该组件在 iOS 8 或更高版本中使用,则可以使用 UIAlertController,否则将回退到 UIActionSheet。这将使它成为一个向后和向前兼容的操作表,以替换我正在使用的应用程序周围的许多操作表。是的,我需要保持向后兼容性。

我已经对此进行了原型设计,但无论出于何种原因,当我展示 ImmortalActionSheet 时,UIAlertController 视图本身将始终显示在左上角 (0, 0)。无论我改变中心,它都不会移动。

UIAlertController 移动到一个错误的位置

0 投票
5 回答
3995 浏览

java - Do Java 8 default methods break source compatibility?

It has generally been the case the Java source code has been forward compatible. Until Java 8, as far as I know, both compiled classes and source have been forward compatible with later JDK/JVM releases. [Update: this is not correct, see comments re 'enum', etc, below.] However, with the addition of default methods in Java 8 this appears to no longer be the case.

For example, a library I have been using has an implementation of java.util.List which includes a List<V> sort(). This method returns a copy of the contents of the list sorted. This library, deployed as a jar file dependency, worked fine in a project being built using JDK 1.8.

However, later I had occasion to recompile the library itself using JDK 1.8 and I found the library no longer compiles: the List-implementing class with its own sort() method now conflicts with the Java 8 java.util.List.sort() default method. The Java 8 sort() default method sorts the list in place (returns void); my library's sort() method - since it returns a new sorted list - has an incompatible signature.

So my basic question is:

  • Doesn't JDK 1.8 introduce a forward incompatibility for Java source code due to default methods?

Also:

  • Is this the first such forward incompatible change?
  • Was this considered or discussed when default methods where designed and implemented? Is it documented anywhere?
  • Was the (admittedly small) inconvenience discounted versus the benefits?

The following is an example of some code that compiles and runs under 1.7 and runs under 1.8 - but does not compile under 1.8:

The following shows this code being compiled (or failing to) and being run.

0 投票
2 回答
670 浏览

c# - Data Contract Serializer 被引用的属性的前向兼容性

我正在尝试支持数据合同序列化程序的前向兼容性。我遇到问题的案例:

如果您有一个对象被保存为对在更高版本中添加到已知类型内的属性的引用,它将成为例外。请注意,这两种类型在两个版本中都是已知的。唯一新的是其中一个对象内部的属性。

我在samplessamples附上了一个简单的问题模拟:

它有两个不同的项目: V1 是一个已经部署的旧版本。V2 是 V1 的更新版本。V2 正在保存其数据,V1 需要能够加载 V2 保存的数据以支持向前兼容。

共有三种自定义类型: People:有两个对象引用,Person 和 AnotherPerson 保存在其中。

在 V1 和 V2 中:

人:有名字。

在 V1 和 V2 中:

AnotherPerson:有一个名称,在 V2 中添加了对 Person (FriendPerson) 的引用。

在 V1 中:

在 V2 中:

版本 2 正在保存数据:

版本 1 正在加载相同的数据:

保存的数据:

当 V1 尝试加载数据时,会引发此异常:

内部异常:

我怀疑该错误是因为该对象引用了在扩展对象内部反序列化的类型并且没有任何类型。原因是,如果您在 People 中添加一个新的 Person 实例,而不是在 AnotherPerson (FriendPerson) 中引用相同的实例。

然后保存的文件变为以下,一切正常:

我尝试使用 Data Contract Resolver、在序列化程序中动态添加已知类型和 Data Contract Surrogate 来解决问题,但是它们都不起作用。原因是当序列化程序反序列化 FriendPerson 并且在此之前未调用代理或解析器内部的覆盖方法时引发异常。

注意我们需要保留对象引用并且删除它不是一个选项。

0 投票
2 回答
894 浏览

crash - 带有 JAWS 16 的 Microsoft Edge 在关注多个网站上的输入字段时行为异常

当 JAWS 16 在 Windows 10 系统上运行时。在 Edge 上测试了多个网站。一切如下:

  1. 单击输入,将焦点设置在该输入上。光标可见,但以稍高的速度闪烁。
  2. 几秒钟后(少于 10 秒),页面会强制刷新。在现场看不到任何击键,但 JAWS 确实会回话一些,如果不是全部的话。
  3. 页面刷新后,重复步骤1
  4. 再次刷新页面,但这一次,网站崩溃并给出了一个未找到的页面。

对此的任何帮助都会很棒。

PS:相同的网站适用于较低版本的 Internet Explorer 和 JAWS 14 组合。

您可以使用任何具有用户可访问输入字段的网站。上面提到的问题由我在 Stack Overflow、Bing 等上进行了测试。出于某种原因,这在 Google.com 上确实有效。

0 投票
1 回答
2581 浏览

html - http-equiv Cache-Control 和 Pragma 指令是否有符合 HTML5 的替代方案?

我正在更新网站的 HTML 以符合 HMTL5。现有站点具有以下两个元http-equiv元素:

  • 缓存控制
  • 编译指示

这两个 HTML5 兼容吗?如果不是,我应该用什么替换这些以使我的网站符合 HTML5 标准?

我发现这个链接列出了有效的http-equiv编译指示:

http://www.w3.org/TR/html5/document-metadata.html#attr-meta-http-equiv

它不包括列表中的 Cache-Control 或 Pragma。

提前致谢。

0 投票
0 回答
924 浏览

android - Mediaplayer 错误 Android for lollipop+ 错误 (1,-38)

在我的应用程序中,我做视频流,它可以在 5.0 设备上运行。对于 5.0 以上,它没有。它给出(1,-38)。1 表示这是未知错误。那么有没有人有任何想法?

这是我设置数据源的行。

谢谢

0 投票
1 回答
1520 浏览

windows-10 - 在 Windows 10 上使用 JavaScript 在 Edge 中检测“平板电脑/触摸模式”?

之前有人问过这个问题,但答案并不完全是我需要的。

我需要在 Microsoft Edge 中区分它是否是平板电脑(桌面)。

1) 以下线程: 你能在 Windows 10 上使用 JavaScript 检测 Edge 和 IE11 中的“平板电脑模式”吗?

确实有效,但我担心在下一个版本中微软会改变这种行为。

我怎么能确定他们不会?

答案if condition of window.PointerEvent根本不起作用,因为它是在桌面中定义的。

我无法使用此处建议的 CSS 媒体查询交互媒体功能: 有什么方法可以检测用户是否启动了 Microsoft Edge 平板电脑或桌面浏览器?

0 投票
1 回答
506 浏览

caching - angular2-beta.0 真的缓存视图吗?

速度与性能

Angular 2 比 Angular 1 快得多,它支持通过服务器端预渲染实现快速初始加载、用于快速启动的离线编译以及用于平滑虚拟滚动和快速视图转换的超快更改检测和视图缓存。

这些功能看起来很棒,但一个正常的要求是,当我从 导航ListComponent到 时ViewComponent,我希望保留ListComponent缓存,所以当我从 中单击返回时ViewComponentListComponent不需要重新渲染(ListComponent通常从第 2、3 页等获取 AJAX 数据。我知道我可以将数据保存在服务中并scrollPosition在单击返回时存储,但它会再次重新呈现数据。我真的认为缓存它是一种更好的方法。

我实现CanReuse了 ,但它不起作用,它只在 . 之间导航时起作用ViewComponentsListComponent所以,我想知道ViewComponent缓存是如何工作的。

0 投票
1 回答
210 浏览

android - 什么是android中的兼容性行为?

当我阅读 targetSDKVersion 的文档时,我遇到了一个术语,即“兼容性行为”。

一个整数,指定应用程序所针对的 API 级别。如果未设置,则默认值等于提供给 minSdkVersion 的值。此属性通知系统您已针对目标版本进行了测试,并且系统不应启用任何兼容性行为来保持您的应用程序与目标版本的前向兼容性。该应用程序仍然能够在旧版本上运行(低至 minSdkVersion)。

我不明白,这里的兼容性行为是什么。任何例子都可以帮助我清楚地说明这个术语。