本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
什么是原始类型,为什么我们不应该使用它呢?
Java中的原始类型是什么,为什么我经常听到不应该在新代码中使用它们的信息?
如果我们不能使用原始类型,那有什么选择呢?有什么更好的选择?
高分回答:
Java中的原始类型是什么,为什么我经常听到不应该在新代码中使用它们的信息?
原始类型是Java语言的古老历史。在开始的时候Collections,他们Objects一无所有,一无所有。对Collections所需的强制转换的每个操作都从Object转换为所需的类型。
List aList = new ArrayList();
String s = "Hello World!";
aList.add(s);
String c = (String)aList.get(0);
尽管大多数情况下都可行,但确实发生了错误
List aNumberList = new ArrayList();
String one = "1";//Number one
aNumberList.add(one);
Integer iOne = (Integer)aNumberList.get(0);//Insert ClassCastException here
旧的无类型集合不能强制类型安全,因此程序员必须记住他存储在集合中的内容。 为了克服这种局限性而发明的泛型,开发人员只需声明一次存储的类型,然后由编译器执行即可。
List<String> aNumberList = new ArrayList<String>();
aNumberList.add("one");
Integer iOne = aNumberList.get(0);//Compile time error
String sOne = aNumberList.get(0);//works fine
为了比较:
// Old style collections now known as raw types
List aList = new ArrayList(); //Could contain anything
// New style collections with Generics
List<String> aList = new ArrayList<String>(); //Contains only Strings
比较接口比较复杂:
//raw, not type save can compare with Other classes
class MyCompareAble implements CompareAble
{
int id;
public int compareTo(Object other)
{return this.id - ((MyCompareAble)other).id;}
}
//Generic
class MyCompareAble implements CompareAble<MyCompareAble>
{
int id;
public int compareTo(MyCompareAble other)
{return this.id - other.id;}
}
注意,不可能用原始类型实现CompareAble接口compareTo(MyCompareAble)。为什么不应该使用它们:
Object存储在中的任何内容Collection都必须先进行转换,然后才能使用
使用泛型可以进行编译时检查
使用原始类型与将每个值存储为 Object
编译器的工作:泛型是向后兼容的,它们使用与原始类型相同的Java类。魔术主要发生在编译时。
List<String> someStrings = new ArrayList<String>();
someStrings.add("one");
String one = someStrings.get(0);
将被编译为:
List someStrings = new ArrayList();
someStrings.add("one");
String one = (String)someStrings.get(0);
如果直接使用原始类型,则这与您编写的代码相同。以为我不确定该CompareAble接口会发生什么,我想它会创建两个compareTo函数,一个函数采用a,另一个函数MyCompareAble采用anObject并将其在转换后传递给第一个函数。
原始类型的替代方法是什么:使用泛型
文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/2…
作者建议:使用泛型吧,方便扩展
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️