标签: casting

从超类到子类的显式转换

public class Animal {
    public void eat() {}
}

public class Dog extends Animal {
    public void eat() {}

    public void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = (Dog) animal;
    }
}
Run Code Online (Sandbox Code Playgroud)

赋值Dog dog = (Dog) animal;不会生成编译错误,但在运行时会生成一个ClassCastException.为什么编译器无法检测到此错误?

java casting classcastexception

140
推荐指数
4
解决办法
18万
查看次数

在特定位置的字符串中插入字符

我的价格是int6位数.我希望将它显示为String带有小数点(.)的结尾处的2位数int.我想使用a float但建议String用于更好的显示输出(而不是1234.51234.50).因此,我需要一个函数,它将采用intas参数并返回正确格式化String的结尾,小数点为2位数.

说:

int j= 123456 
Integer.toString(j); 

//processing...

//output : 1234.56
Run Code Online (Sandbox Code Playgroud)

java string casting

139
推荐指数
6
解决办法
37万
查看次数

"T"类型的值无法转换为

这可能是一个新手的问​​题,但谷歌出人意料地没有提供答案.

我有这种相当人为的方法

T HowToCast<T>(T t)
{
    if (typeof(T) == typeof(string))
    {
        T newT1 = "some text";
        T newT2 = (string)t;
    }

    return t;
}
Run Code Online (Sandbox Code Playgroud)

来自C++背景我希望这可以工作.但是,无法编译"无法将类型'T'隐式转换为字符串"和"无法将类型'T'转换为字符串"以进行上述两种分配.

我要么在概念上做错了,要么只是有错误的语法.请帮我整理一下.

谢谢!

.net c# generics casting

135
推荐指数
3
解决办法
9万
查看次数

如何在C++中转换/转换指向引用

如何将指针(Object *ob)传递给原型的函数void foo(Object &)

c++ pointers casting reference type-conversion

134
推荐指数
2
解决办法
11万
查看次数

if语句中的赋值

我有一个类Animal及其子类Dog.我经常发现自己编写以下代码:

if (animal is Dog)
{
    Dog dog = animal as Dog;    
    dog.Name;    
    ... 
}
Run Code Online (Sandbox Code Playgroud)

对于变量Animal animal;.

是否有一些语法允许我写如下:

if (Dog dog = animal as Dog)
{    
    dog.Name;    
    ... 
}
Run Code Online (Sandbox Code Playgroud)

c# casting if-statement

133
推荐指数
6
解决办法
6万
查看次数

C#"as"演员与经典演员

可能重复:
使用CLR中的'as'关键字进行转换

我最近了解了一种不同的演员方式.而不是使用

SomeClass someObject = (SomeClass) obj;
Run Code Online (Sandbox Code Playgroud)

可以使用以下语法:

SomeClass someObject = obj as SomeClass;
Run Code Online (Sandbox Code Playgroud)

如果obj不是SomeClass,它似乎返回null,而不是抛出一个类转换异常.

我看到如果转换失败并且我尝试访问someObject变量,这可能导致NullReferenceException.所以我想知道这种方法背后的理由是什么?为什么要使用这种方式而不是(旧)方式 - 它似乎只是将失败的演员问题"更深"地转移到代码中.

c# casting

132
推荐指数
4
解决办法
9万
查看次数

Android,如何将字符串转换为日期?

每次应用程序启动时,我将当前时间存储在数据库中.

Calendar c = Calendar.getInstance();
    String str = c.getTime().toString();
    Log.i("Current time", str);
Run Code Online (Sandbox Code Playgroud)

在数据库方面,我将当前时间存储为字符串(如上面的代码所示).因此,当我从数据库加载它时,我需要将其强制转换为Date对象.我看到了一些样本,他们都使用了"DateFormat".但我的格式与日期格式完全相同.所以,我认为没有必要使用"DateFormat".我对吗?

无论如何直接将此String转换为Date对象?我想将此存储时间与当前时间进行比较.

谢谢

======> 更新

谢谢亲爱的伙计们.我使用以下代码:

private boolean isPackageExpired(String date){
        boolean isExpired=false;
        Date expiredDate = stringToDate(date, "EEE MMM d HH:mm:ss zz yyyy");        
        if (new Date().after(expiredDate)) isExpired=true;

        return isExpired;
    }

    private Date stringToDate(String aDate,String aFormat) {

      if(aDate==null) return null;
      ParsePosition pos = new ParsePosition(0);
      SimpleDateFormat simpledateformat = new SimpleDateFormat(aFormat);
      Date stringDate = simpledateformat.parse(aDate, pos);
      return stringDate;            

   }
Run Code Online (Sandbox Code Playgroud)

string android casting date

129
推荐指数
4
解决办法
21万
查看次数

将List <SubClass>强制转换为List <BaseClass>的最有效方法

我有一个List<SubClass>我想要作为一个List<BaseClass>.看起来它应该不是一个问题,因为将a转换SubClass为a BaseClass是一个快照,但我的编译器抱怨演员表是不可能的.

那么,获取对相同对象的引用的最佳方法是List<BaseClass>什么?

现在我只是制作一个新列表并复制旧列表:

List<BaseClass> convertedList = new ArrayList<BaseClass>(listOfSubClass)
Run Code Online (Sandbox Code Playgroud)

但据我了解,必须创建一个全新的列表.如果可能的话,我想参考原始列表!

java inheritance casting

127
推荐指数
5
解决办法
6万
查看次数

在C#中将float转换为int时的奇怪行为

我有以下简单的代码:

int speed1 = (int)(6.2f * 10);
float tmp = 6.2f * 10;
int speed2 = (int)tmp;
Run Code Online (Sandbox Code Playgroud)

speed1和speed2应该具有相同的值,但事实上,我有:

speed1 = 61
speed2 = 62
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用Math.Round而不是cast,但我想了解为什么值不同.

我查看了生成的字节码,但除了存储和加载外,操作码是相同的.

我也在java中尝试了相同的代码,我正确地获得了62和62.

有人可以解释一下吗?

编辑: 在实际代码中,它不是直接6.2f*10而是函数调用*常量.我有以下字节码:

速度1:

IL_01b3:  ldloc.s    V_8
IL_01b5:  callvirt   instance float32 myPackage.MyClass::getSpeed()
IL_01ba:  ldc.r4     10.
IL_01bf:  mul
IL_01c0:  conv.i4
IL_01c1:  stloc.s    V_9
Run Code Online (Sandbox Code Playgroud)

速度2:

IL_01c3:  ldloc.s    V_8
IL_01c5:  callvirt   instance float32 myPackage.MyClass::getSpeed()
IL_01ca:  ldc.r4     10.
IL_01cf:  mul
IL_01d0:  stloc.s    V_10
IL_01d2:  ldloc.s    V_10
IL_01d4:  conv.i4
IL_01d5:  stloc.s    V_11
Run Code Online (Sandbox Code Playgroud)

我们可以看到操作数是浮点数,唯一的区别是stloc/ldloc

至于虚拟机,我尝试使用Mono/Win7,Mono/MacOS和.NET/Windows,结果相同

c# floating-point int expression casting

127
推荐指数
3
解决办法
2万
查看次数

将BigDecimal转换为Integer

我有Hibernate方法,它返回一个BigDecimal.我有另一个API方法,我需要传递该数字但它接受Integer作为参数.我无法更改两种方法的返回类型或变量类型.

现在如何将BigDecimal转换为Integer并将其传递给第二个方法?

有没有办法解决这个问题?

java integer casting bigdecimal

126
推荐指数
5
解决办法
28万
查看次数