如果没有明确的类型转换,语言是否可以“完整”?

时间:2012-03-07 18:22:56

标签: java casting language-agnostic theory

如果没有显式转换,编程语言是否可以“完整”?从本质上讲,使用缺少显式类型转换的语言是否有任何

例如,the post below表明Java需要显式类型转换来编写自定义泛型类。

是否有其他示例用例我们绝对需要显式转换?

5 个答案:

答案 0 :(得分:5)

以下是一些

要反转自动原始加宽:

byte blammy = (byte)(schmarr & 0xF7);

传统代码:

public void oldSchoolMethod(List oldSchoolListOfStrings)
{
    String firstValue = (String)oldSchoolListOfStrings.get(0);
}

HTTP代码:

public String getSchmarr(HttpServletRequest request)
{
    HttpSession session = request.getSession();
    return (String)session.getAttribute("Schmarr");
}

编辑:“类型增加”更正为“原始扩展”。

答案 1 :(得分:2)

当然,以equals方法为例 - 它必须得到Object参数。 (并阅读关于平等和朋友的this great chapter of Effective Java

答案 2 :(得分:1)

在Java中,无法声明泛型类型T的数组。例如,使用new T[10]声明数组无效:

public class List<T> {
    T[] backing_array = new T[10]; // this line is invalid,


    public T Item(int index) {
        return backing_array[index]; // and therefore this line is invalid as well.
    }

    //etc...

我们拥有的最佳替代解决方案是:

public class List<T> {
    Object[] backing_array = new Object[10];

    public T Item(int index) {
        return (T) backing_array[index]; // notice that a cast is needed here if we want the return type of this function to be T
    }

    //etc...

如果Java中不存在显式类型转换,则无法构建通用数组列表,因为不允许声明通用类型T的数组。

答案 3 :(得分:0)

我在处理非基于泛型构建的库时经常使用强制转换,或者当我需要向下转换某些对象以访问我知道由子类实现的功能时,而不是我所使用的类否则使用。用if (foo instanceof Bar)检查可能是明智之举 但是,在进行演员表之前,该条款。

答案 4 :(得分:0)

当我们反序列化一个对象(例如从一个字符串)时,我们需要将该对象强制转换为类,以便我们可以使用它的方法。