如果没有显式转换,编程语言是否可以“完整”?从本质上讲,使用缺少显式类型转换的语言是否有任何?
例如,the post below表明Java需要显式类型转换来编写自定义泛型类。
是否有其他示例用例我们绝对需要显式转换?
答案 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)
当我们反序列化一个对象(例如从一个字符串)时,我们需要将该对象强制转换为类,以便我们可以使用它的方法。