问题标签 [type-safety]

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 投票
6 回答
192 浏览

c++ - C++ STL:迭代器的问题

我有一个初学者问题:

我在这里做错了什么?为什么不str.begin()将类型检查为 a string::iterator

更新:更好的版本:

0 投票
1 回答
478 浏览

c++ - 关于迭代类型安全枚举的反馈

为响应较早的 SO 问题“在 C++ 中枚举枚举”,我提出了以下使用类型安全枚举惯用语的可重用解决方案。我只是想看看社区对我的解决方案的反馈。此解决方案使用静态数组,该数组在首次使用前使用类型安全的枚举对象填充。然后简单地将枚举迭代简化为数组迭代。我知道如果枚举数没有严格增加,这个解决方案将不起作用。

0 投票
2 回答
392 浏览

java - 来自 Class 的类型安全映射对事物

我想制作一个具有以下界面的地图类容器:

有趣的一点是T每个Class<T>->Thing<T>对中的 s 是相同的T,但容器应该能够容纳许多不同类型的对。最初我尝试了一个 (Hash) Map。但是,例如,

是不对的,因为 then对于该地图中的所有T对都是相同T的。当然,

可以,但是我没有类型安全保证,所以当我 时get(String.class),我不能确定我是否得到了一个Thing<String>实例。

有没有一种明显的方法来实现我正在寻找的那种类型安全?

0 投票
3 回答
816 浏览

c# - 使这个反射方法调用类型安全

如您所见,我正在跟踪此传入消息的更改,以在另一个对象上运行更改。要运行的方法作为字符串传递给 PropertyChanged。有没有人有提示如何使这种类型安全?

0 投票
15 回答
56952 浏览

c# - C#中的可区分联合

[注意:这个问题的原标题是“ C# 中的 C (ish) style union ”,但正如 Jeff 的评论告诉我的,显然这个结构被称为“discriminated union”]

原谅这个问题的冗长。

在 SO 中已经有几个类似的问题需要挖掘,但它们似乎专注于联合的内存节省优势或将其用于互操作。 这是一个这样的问题的例子

我想要一个联合类型的东西有点不同。

我现在正在编写一些代码,它生成看起来有点像这样的对象

相当复杂的东西我想你会同意的。问题是它ValueA只能是几种特定类型(比如说stringintFoo(这是一个类),并且ValueB可以是另一小组类型。我不喜欢将这些值视为对象(我想要温暖舒适的感觉带有一点类型安全性的编码)。

所以我想写一个简单的小包装类来表达 ValueA 在逻辑上是对特定类型的引用这一事实。我打电话给这门课Union是因为我想要达到的目标让我想起了 C 中的联合概念。

使用这个类 ValueWrapper 现在看起来像这样

这与我想要实现的目标相似,但我缺少一个相当关键的元素 - 即在调用 Is 和 As 函数时编译器强制类型检查,如下代码所示

IMO 询问 ValueA 是否是 a 是无效的,char因为它的定义清楚地表明它不是 - 这是一个编程错误,我希望编译器能够解决这个问题。[另外,如果我能做到这一点,那么(希望)我也会得到智能感知——这将是一个福音。]

为了实现这一点,我想告诉编译器类型T可以是 A、B 或 C 之一

有谁知道我想要实现的目标是否可行?还是我一开始就写这门课是愚蠢的?

提前致谢。

0 投票
1 回答
1840 浏览

c# - TypeLoadException 未被 try/catch 捕获

我正在尝试重新创建一个TypeLoadException用于演示目的,所以我有一个可笑的愚蠢的库设置,看起来像这样:

TheLibrary版本 1 具有以下相关接口:

虽然版本 2TheLibrary的接口看起来像:

ProxyForV2有这个实现版本 2.0 的类IShrinkingThing

因此,在 中,如果有人尝试分配 a ,TestProject我希望会导致 a ,因为接口的第一个版本具有第二个版本未实现的属性。为了证明这一点,我有一个单元测试,如下所示:TypeLoadExceptionProxyForV2.ShrinkingThingImpl

这是我的问题:这个单元测试失败了。但不是由于 my Assert.Fail,正如我所期望的那样。测试输出如下所示:

测试方法 TestProject.LoadTester.ShrinkingThingBreaks 抛出异常:System.TypeLoadException:方法 'get_RemovedProperty' in type 'ProxyForV2.ShrinkingThingImpl' from assembly 'ProxyForV2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 没有实现。 .

所以 aTypeLoadException被抛出,虽然它唯一可能被抛出的地方是在一个try带有 a 的块中catch (TypeLoadException),但异常拒绝被捕获。除此之外,即使我使用包罗万象,单元测试也会失败,并出现与以前相同的错误:

到底是怎么回事?显然,这是一个完全人为的场景,但我仍然想知道发生了什么,以便可以在运行时避免这个错误,或者至少在它发生时处理(是的,我知道最终的解决方案是确保所有库版本都相同)。

最糟糕的部分是对类的任何访问,例如typeof(ProxyForV2.ConsistentThingImpl)ProxyForV2.ConsistentThingImpl.SomeStaticFunction()导致这种 un-catchable TypeLoadException,因此很明显,当 .NET 尝试加载类时,而不是来自任何分配时,问题就产生了。

我减轻这个问题的唯一想法是尝试在不同的应用程序域中加载类型,这样它就不会干扰,然后做一些疯狂的反射来查看接口是否与实现兼容,但这似乎是完整的和完全的矫枉过正。

总结:为什么似乎不可能以“正常”的方式捕捉到这个问题,我该如何在运行时解决这样的问题?

0 投票
4 回答
359 浏览

java - mix generic type variables to implement a type-safe map function in Java

I want to write a type-safe map method in Java that returns a Collection of the same type as the argument passed (i.e. ArrayList, LinkedList, TreeSet, etc.) but with a different generic type (that between the angled brackets), determined by the generic type of another parameter (the resulting type of the generic mapping function).

So the code would be used as:

The idea would be something like:

but that doesn't work because the compiler isn't expecting generic type variables to be further specialised (I think).

Any idea on how to make this work?

0 投票
1 回答
3680 浏览

.net-3.5 - .Net 的 AppSettingsReader 与 ConfigurationManager 在读取应用程序配置设置方面的优势

AppSettingsReader 类和 .Net 3.5 中 ConfigurationManager 类的 AppSettings 成员之间是否存在实质性区别?

我正在构建一些遗留代码,以前的开发人员使用 AppSettingsReader.GetValue(),而我更倾向于使用 ConfigurationManager.AppSettings.Get()。

从内部看,AppSettingReader 似乎更加类型安全,但它的使用似乎更加冗长。如果我正在检索的应用程序设置是众所周知的并且相当静态,那么使用 AppSettingsReader 有什么好处吗?

0 投票
6 回答
560 浏览

c++ - 我可以让三元运算符将我的类视为布尔值吗?

我最近一直在进行大规模的重构,我正在更改很多代码以返回布尔值而不是显式的返回代码。为了帮助这种重构,我决定尽可能依靠编译器,让它告诉我需要更改代码的地方。我通过引入以下类来做到这一点(有关其工作原理的详细信息,请参见此处)

现在,我没有使用普通bool类型作为返回类型,而是使用了这个类,这意味着我不能再编译这样的东西了:

太好了:它让编译器为我完成了很多艰苦的工作,从而使重构在庞大的代码库上变得易于管理。所以现在我已经完成了重构,我很想继续使用这个类并继续使用它,因为它为我们提供了内置bool类型所没有的额外安全级别。

然而,有一个“问题”阻止我这样做。目前我们在代码中大量使用了三元运算符,问题是它与这个没有显式强制转换的新类不兼容:

如果我可以“解决”这个问题,以便我可以无缝地使用我的课程,我可能会在整个代码库中继续使用它。有谁知道这个问题的解决方案?或者只是不可能做我想做的事?

0 投票
6 回答
848 浏览

type-safety - 静态类型的语言意味着什么?

我的理解是,这意味着人们可能会编写一个程序来正式证明用静态类型语言编写的程序将没有某个(小)缺陷子集。

我的问题如下:

假设我们有两种图灵完备的语言,A 和 B。假定 A 是“类型安全的”,而假定“B”不是。假设我有一个程序 L 来检查任何用 A 编写的程序的正确性。是什么阻止我将任何用 B 编写的程序翻译成 A,应用 L。如果 P 从 A 翻译到 B,那么为什么 PL 不是用 B 编写的任何程序的有效类型检查器?

我接受过代数培训,并且才刚刚开始学习 CS,因此可能有一些明显的原因表明这不起作用,但我非常想知道。这整个“类型安全”的事情对我来说已经有一段时间了。