Questions tagged «casting»

强制转换是一个过程,其中如果允许转换,则将对象类型显式转换为另一种类型。此过程可能会导致价值变化。

5
Kotlin:如何使用List演员表:未选中的Cast:kotlin.collections.List <Kotlin.Any?>到kotlin.colletions.List <Waypoint>
我想编写一个函数,该函数返回a中的每个项目List,而不是第一个或最后一个项目(通过点)。该函数获取通用List&lt;*&gt;输入。仅当列表的元素属于以下类型时,才应返回结果Waypoint: fun getViaPoints(list: List&lt;*&gt;): List&lt;Waypoint&gt;? { list.forEach { if(it !is Waypoint ) return null } val waypointList = list as? List&lt;Waypoint&gt; ?: return null return waypointList.filter{ waypointList.indexOf(it) != 0 &amp;&amp; waypointList.indexOf(it) != waypointList.lastIndex} } 当铸造List&lt;*&gt;来List&lt;Waypoint&gt;,我得到的警告: 未经检查的演员表:kotlin.collections.List到kotlin.colletions.List 我想不通其他方法来实现它。在没有此警告的情况下实现此功能的正确方法是什么?
108 list  generics  casting  kotlin 

15
将整数转换为Long
我需要使用反射获取字段的值。碰巧的是,我并不总是确定字段的数据类型是什么。为此,为了避免某些代码重复,我创建了以下方法: @SuppressWarnings("unchecked") private static &lt;T&gt; T getValueByReflection(VarInfo var, Class&lt;?&gt; classUnderTest, Object runtimeInstance) throws Throwable { Field f = classUnderTest.getDeclaredField(processFieldName(var)); f.setAccessible(true); T value = (T) f.get(runtimeInstance); return value; } 并使用如下方法: Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance); 要么 Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance); 问题是我似乎无法转换Integer为Long: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long …
108 java  reflection  casting 

8
Java Class.cast()与强制转换运算符
在我的C ++时代里,学习过C风格的强制转换运算符的弊端后,我最初很高兴地发现Java 5中java.lang.Class已经获得了一种cast方法。 我以为最终我们有了一种面向对象的处理铸造的方法。 事实证明Class.cast与static_castC ++不同。更像是reinterpret_cast。它不会在预期的地方生成编译错误,而是会推迟到运行时。这是一个演示不同行为的简单测试用例。 package test; import static org.junit.Assert.assertTrue; import org.junit.Test; public class TestCast { static final class Foo { } static class Bar { } static final class BarSubclass extends Bar { } @Test public void test ( ) { final Foo foo = new Foo( ); …

2
Java 6与Java 7在自动拆箱中的差异
我已经注意到Java SE 6和Java SE 7在自动拆箱行为上的差异。我想知道为什么会这样,因为我找不到这两个版本之间这种行为变化的任何文档。 这是一个简单的例子: Object[] objs = new Object[2]; objs[0] = new Integer(5); int myInt = (int)objs[0]; 使用Java SE 7中的javac可以很好地进行编译。但是,如果我给编译器提供“ -source 1.6”参数,则在最后一行会出现错误: inconvertible types found : java.lang.Object required: int 我尝试下载Java SE 6以使用本机版本6编译器进行编译(没有任何-source选项)。它同意并给出与上述相同的错误。 那有什么呢?从更多的实验来看,Java 6中的拆箱似乎只能拆装明显(在编译时)属于装箱类型的值。例如,这在两个版本中都适用: Integer[] objs = new Integer[2]; objs[0] = new Integer(5); int myInt = (int)objs[0]; 因此,似乎在Java …
107 java  casting  java-7  unboxing 

7
'is'与尝试使用空检查进行转换
我注意到Resharper建议我转一下这个: if (myObj.myProp is MyType) { ... } 到这个: var myObjRef = myObj.myProp as MyType; if (myObjRef != null) { ... } 为什么会建议这种变化?我习惯于Resharper提出优化更改和代码减少更改的建议,但这感觉就像是要接受我的单个语句并将其变成两条线。 根据MSDN: 一个是 表达式的计算结果为真,如果同时满足以下两个条件都满足: 表达式不为null。可以将表达式转换为type。也就是说,表单的强制转换表达式(type)(expression)将完成而不会引发异常。 我is是否只是在一行中误读了该代码,或者不执行完全相同的检查,而无需为空检查显式创建另一个局部变量?
107 c#  .net  casting  resharper 

1
从时间戳记日期减去1天
我正在使用Datagrip for Postgresql。我有一个带有时间戳格式的日期字段的表(ex: 2016-11-01 00:00:00)。我希望能够: 应用数学运算符减去1天 根据今天-130天的时间窗口对其进行过滤 在没有邮票的hh / mm / ss部分的情况下显示它(2016-10-31) 当前开始查询: select org_id, count(accounts) as count, ((date_at) - 1) as dateat from sourcetable where date_at &lt;= now() - 130 group by org_id, dateat ((date_at)-1)第1行上的子句导致: [42883]错误:运算符不存在:没有时区的时间戳-整数提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置:69 该now()子句产生类似的消息: [42883]错误:运算符不存在:带时区的时间戳-整数提示:没有运算符与给定的名称和参数类型匹配。您可能需要添加显式类型转换。位置:... 类型转换的在线指南完全没有帮助。输入表示赞赏。
105 sql  postgresql  casting 

5
Java转换会带来开销吗?为什么?
当我们将一种类型的对象转换为另一种类型时,是否会有开销?还是编译器可以解决所有问题,并且在运行时没有成本? 这是一般的事情,还是有不同的情况? 例如,假设我们有一个Object []数组,其中每个元素可能具有不同的类型。但是我们始终可以肯定地知道,例如,元素0是Double,元素1是String。(我知道这是一个错误的设计,但是让我们假设我必须这样做。) Java的类型信息是否仍在运行时保留?还是编译后一切都被遗忘了,如果我们执行(Double)elements [0],我们将仅遵循指针并将这8个字节解释为double,无论是什么? 我不清楚在Java中如何完成类型。如果您对书籍或文章有任何建议,那么也谢谢。

4
如何为我的班级提供自定义演员表支持?
如何为将课程转换为其他类型提供支持?例如,如果我有自己的实现管理a byte[],并且我想让人们将我的班级强制转换为a byte[],而该类只会返回私有成员,那么我该怎么做? 让他们也将其也转换为字符串是一种常见的做法,还是我应该重写ToString()(或同时重写)?
102 c#  casting 

13
SQL错误“ ORA-01722:无效的号码”
对某人来说非常简单,以下插入内容为我提供了 ORA-01722:编号无效 为什么? INSERT INTO CUSTOMER VALUES (1,'MALADY','Claire','27 Smith St Caulfield','0419 853 694'); INSERT INTO CUSTOMER VALUES (2,'GIBSON','Jake','27 Smith St Caulfield','0415 713 598'); INSERT INTO CUSTOMER VALUES (3,'LUU','Barry','5 Jones St Malvern','0413 591 341'); INSERT INTO CUSTOMER VALUES (4,'JONES','Michael','7 Smith St Caulfield','0419 853 694'); INSERT INTO CUSTOMER VALUES (5,'MALADY','Betty','27 Smith St …

3
将对象转换为TypeScript中的接口
我正在尝试将代码的内容从express(使用body-parser中间件)中的请求正文转换为接口,但这并没有强制类型安全。 这是我的界面: export interface IToDoDto { description: string; status: boolean; }; 这是我尝试进行转换的代码: @Post() addToDo(@Response() res, @Request() req) { const toDo: IToDoDto = &lt;IToDoDto&gt; req.body; // &lt;&lt;&lt; cast here this.toDoService.addToDo(toDo); return res.status(HttpStatus.CREATED).end(); } 最后,被称为的服务方法: public addToDo(toDo: IToDoDto): void { toDo.id = this.idCounter; this.todos.push(toDo); this.idCounter++; } 我可以传递任何参数,即使那些与接口定义不匹配的参数也可以,并且此代码可以正常工作。我希望,如果无法从响应主体到接口进行强制转换,那么将在运行时(如Java或C#)引发异常。 我已经读过在TypeScript中不存在类型转换,只有Type Assertion,所以它只会告诉编译器对象是type x,所以...我错了吗?强制执行并确保类型安全的正确方法是什么?



14
为什么要避免铸造?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 通常我会尽可能避免转换类型,因为我认为这是不良的编码实践,并且可能会导致性能下降。 但是,如果有人要我解释为什么会这样,我可能会像头灯中的鹿一样看着它们。 那么,为什么/何时铸造不好? 它对于Java,C#,C ++是通用的,还是每个不同的运行时环境都按照自己的方式处理? 欢迎使用任何语言的细节,例如为什么在c ++中不好?
97 c#  java  c++  casting 

2
为什么可以键入别名函数并在不进行强制转换的情况下使用它们?
在Go中,如果您定义新类型,例如: type MyInt int 然后,您不能将a传递给MyInt需要int的函数,反之亦然: func test(i MyInt) { //do something with i } func main() { anInt := 0 test(anInt) //doesn't work, int is not of type MyInt } 精细。但是,为什么同样的不适用于功能呢?例如: type MyFunc func(i int) func (m MyFunc) Run(i int) { m(i) } func run(f MyFunc, i int) { f.Run(i) …
97 types  casting  go 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.