问题标签 [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.

Filter by
Sorted by
Tagged with
0 投票
1 回答
9657 浏览

某些 Java 泛型类型转换中的类型安全警告是什么意思?

Java 警告的含义是什么?

类型安全:从 Object 到 List<Integer> 的转换实际上是在检查擦除的类型 List

当我尝试将 Object 强制转换为具有通用信息的类型时,我收到此警告,例如在以下代码中:

0 投票
14 回答
76305 浏览

在 C# 中,为什么不能使用 List对象存储在列表中 variable

It seems that a List object cannot be stored in a List variable in C#, and can't even be explicitly cast that way.

List<string> sl = new List<string>();
Lis

It seems that a List object cannot be stored in a List variable in C#, and can't even be explicitly cast that way.

results in Cannot implicitly convert type System.Collections.Generic.List<string> to System.Collections.Generic.List<object>

And then...

results in Cannot convert type System.Collections.Generic.List<string> to System.Collections.Generic.List<object>

Of course, you can do it by pulling everything out of the string list and putting it back in one at a time, but it is a rather convoluted solution.


The reason is that a generic class like List<> is, for most purposes, treated externally as a normal class. e.g. when you say List<string>() the compiler says ListString() (which contains strings). [Technical folk: this is an extremely plain-English-ified version of what's going on]

Consequently, obviously the compiler can't be smart enough to convert a ListString to a ListObject by casting the items of its internal collection.

That's why there's extension methods for IEnumerable like Convert() that allow you to easily supply conversion for the items stored inside a collection, which could be as simple as casting from one to another.

0 投票
11 回答
152414 浏览

泛型类型转换 FROM 字符串

我有一个类,我想用它来存储另一个类的“属性”。这些属性只有一个名称和一个值。理想情况下,我希望能够添加类型化属性,以便返回的“值”始终是我想要的类型。

类型应该始终是原始类型。这个类继承了一个抽象类,它基本上将名称和值存储为字符串。这个想法是这个子类将为基类添加一些类型安全性(以及为我节省一些转换)。

所以,我创建了一个(大致)这样的类:

所以问题是:

是否有一种“通用”方法可以将字符串转换回原语?

我似乎找不到任何通用接口来链接全面的转换(像ItryParsable这样的东西本来是理想的!)。

0 投票
8 回答
29356 浏览

通用类型检查

有没有办法强制/限制传递给原语的类型? (布尔、整数、字符串等)

现在,我知道您可以通过where子句将泛型类型参数限制为类型或接口实现。但是,这不符合原语(AFAIK)的要求,因为它们并不都有共同点(除了有人说之前的对象!:P)。

所以,我目前的想法是咬紧牙关,做一个大的switch语句,并在失败时抛出一个ArgumentException 。


编辑1:

只是为了澄清:

代码定义应该是这样的:

和实例化:


编辑 2

@Jon Limjap - 好点,我已经在考虑了。我确信有一个通用方法可用于确定该类型是值类型还是引用类型。

这对于立即删除许多我不想处理的对象很有用(但是您需要担心使用的结构,例如Size)。有趣的问题不是吗?:)

这里是:

取自MSDN


我很好奇。这可以使用扩展方法在 .NET 3.x 中完成吗?创建一个接口,并在扩展方法中实现该接口(这可能比有点胖的开关更干净)。另外,如果您以后需要扩展到任何轻量级自定义类型,它们也可以实现相同的接口,而无需更改基本代码。

你们有什么感想?

可悲的消息是我在框架 2 中工作!:D


编辑 3

Jon Limjaps Pointer开始,这太简单了。太简单了,我几乎想哭,但这很棒,因为代码就像一个魅力!

所以这就是我所做的(你会笑的!):

添加到泛型类的代码

然后是一个小工具方法来检查类型并抛出异常,

然后需要做的就是在类构造函数中调用EnforcePrimitiveType()。任务完成!:-)

唯一的缺点是,它只在运行时(显然)而不是设计时抛出异常。但这没什么大不了的,可以使用FxCop之类的实用程序(我们在工作中不使用)。

在此特别感谢 Jon Limjap!

0 投票
3 回答
40579 浏览

模板类型定义 - 你的工作是什么?

C++ 0x 有模板别名(有时称为模板类型定义)。见这里。当前的 C++ 规范没有。

你喜欢用什么来解决?容器对象或宏?你觉得它值得吗?

0 投票
7 回答
480 浏览

如何防止在 PHP 中使用不正确的类型?

众所周知,PHP 的类型非常松散。该语言不要求您为函数参数或类变量指定任何类型的类型。这可能是一个强大的功能。

但有时,它会使调试脚本成为一种痛苦的体验。例如,将一种对象传递给需要另一种对象的方法会产生错误消息,抱怨传递的对象不存在某个变量/方法。这些情况大多是烦恼。更麻烦的问题是,当您使用错误类的对象初始化一个对象时,该“错误对象”将在稍后的脚本执行中使用。在这种情况下,您最终得到的错误比传递原始参数时要晚得多。

与其抱怨我传递的内容没有特定的方法或变量,或者等到脚本执行的很久以后才能使用我传递的对象,我更愿意在我指定对象的确切位置收到一条错误消息类型错误,抱怨对象的类型不正确或不兼容。

您如何在代码中处理这些情况?你如何检测不兼容的类型?如何在我的脚本中引入一些类型检查,以便获得更容易理解的错误消息?

另外,在考虑到 PHP 中的继承时,你怎么能做到这一切呢?考虑:

然后此代码的用户使用他们自己的具体类实现接口:

我希望 ConcreteClass 实例以及所有未来未知的用户定义对象也能被 SetObject 接受。您如何在检查正确类型时允许这样做?

0 投票
11 回答
26729 浏览

您使用的是 C++ 中的哪个类型安全枚举?

众所周知,C++ 中的内置枚举不是类型安全的。我想知道那里使用了哪些实现类型安全枚举的类......我自己使用以下“自行车”,但它有点冗长和有限:

typesafeenum.h:

typesafeenum.cpp:

用法:

补充: 我认为我应该对要求更具体。我将尝试总结它们:

优先级 1:将枚举变量设置为无效值应该是不可能的(编译时错误),没有例外。

优先级 2:应该可以通过单个显式函数/方法调用将枚举值转换为 int。

优先级3:尽可能简洁、优雅、方便的声明和使用

优先级 4:将枚举值与字符串转换。

Priority 5: (Nice to have) Possibility to iterate over enum values.

0 投票
2 回答
6042 浏览

JAXB - XJC - 影响生成的类型安全枚举类和成员

使用 XJC 编译器(来自 JAXB 包)编译以下 simpleType 时...

我最终在 Java 中得到了以下枚举(删除了导入语句和注释)

这正是我想要的......除了public String value()方法。我希望public String getValue()根据 Sun 的命名约定调用该方法。这样我就可以轻松地在使用 EL 的 JSP 页面中使用它。现在我必须解决它。

getValue()有没有人有任何经验将 XJC 编译进一步调整为使用方法而不是方法的更有用的枚举value()?或者我可以添加一个方法或什么?

PS 这发生在 JAXB 的 v2.0.3 中。我下载了最新版本v2.1.8 和那里一样...

0 投票
12 回答
127136 浏览

什么是类型安全?

“类型安全”是什么意思?

0 投票
10 回答
439146 浏览

类型安全:未经检查的演员表

在我的 spring 应用程序上下文文件中,我有类似的内容:

在 java 类中,实现如下所示:

在 Eclipse 中,我看到一条警告说:

类型安全:从 Object 到 HashMap<String,String> 的未经检查的强制转换

什么地方出了错?