我主要使用Java和泛型相对较新.我一直在阅读Java做出错误决定或者.NET有更好的实现等.
那么,泛型中C++,C#,Java之间的主要区别是什么?每个人的利弊?
我听说Generics的Java实现不如C#实现那么好.因为语法看起来很相似,那么Java实现的不合标准是什么,还是宗教观点呢?
Java集合只存储对象,而不是基本类型; 但是我们可以存储包装类.
为什么这个约束?
我以为我会把这个垒球提供给任何想要从公园里击出的人.什么是泛型,泛型的优点是什么,为什么,在哪里,我应该如何使用它们?请保持相当基本.谢谢.
忍受我一段时间.我知道这听起来有些主观和争论,但我发誓最后会有一个问号,这个问题实际上可以客观地回答......
来自.NET和C#背景,我近年来被语法糖所破坏,泛型与扩展方法相结合,在许多.NET解决方案中提供常见问题.使C#泛型非常强大的一个关键特性是,如果其他地方有足够的信息,编译器可以推断出类型参数,所以我几乎不必将它们写出来.在您意识到保存了多少次击键之前,您不必编写多行代码.例如,我可以写
var someStrings = new List<string>();
// fill the list with a couple of strings...
var asArray = someStrings.ToArray();
Run Code Online (Sandbox Code Playgroud)
和C#将只知道,我的意思是,第一var是List<string>,第二个是string[]那.ToArray()真的是.ToArray<string>().
然后我来到Java.
我已经对Java泛型有了足够的了解,知道它们是根本不同的,除此之外,编译器实际上并没有编译成通用代码 - 它剥离了类型参数并使其无论如何都以某种(非常复杂的)方式工作(我还没有真正了解).但即使我知道 Java中的泛型是根本不同的,我也无法理解为什么这些结构是必要的:
ArrayList<String> someStrings = new ArrayList<String>();
// fill the list with a couple of strings...
String[] asArray = someStrings.toArray(new String[0]); // <-- HERE!
Run Code Online (Sandbox Code Playgroud)
为什么我必须实例化一个新的String[],没有任何元素,不会用于任何东西,因为Java编译器知道它是什么String[]而不是我想要的任何其他类型的数组?
我意识到这是重载的方式,而且toArray()当前返回的是Object[].但是,当Java的这一部分被发明时,为什么要做出这个决定呢?为什么这个设计比跳过.toArray()那个 …