有人可以尽可能详细地解释以下类型之间的区别吗?
List
List<Object>
List<?>
让我更具体一点。我什么时候想使用
// 1
public void CanYouGiveMeAnAnswer(List l) { }
// 2
public void CanYouGiveMeAnAnswer(List<Object> l) { }
// 3
public void CanYouGiveMeAnAnswer(List<?> l) { }
最佳答案
正如其他帖子所指出的,您正在询问一个称为泛型的 Java 功能。在 C++ 中,这称为模板。 Java 中的这一特性通常比 C++ 中的特性更易于使用。
让我从功能上回答你的问题(如果这对于 OO 讨论来说不是一个调皮的话)。
在泛型之前,有像 Vector 这样的具体类。
Vector V = new Vector();
vector 包含你给他们的任何对象。
V.add("This is an element");
V.add(new Integer(2));
v.add(new Hashtable());
他们通过将赋予它的所有值转换为一个 Object(所有 Java 类的根)来做到这一点。当您尝试检索存储在 Vector 中的值时,您需要将该值转换回 original 类(如果您想对它做任何有意义的事情)。
String s = (String) v.get(0);
Integer i = (Integer) v.get(1);
Hashtable h = (Hashtable) v.get(2);
铸件很快就会变老。不仅如此,编译器还会向您提示未经检查的强制转换。像这样的转换最紧迫的问题是 Vector 的使用者必须在 编译时 知道其值的类别才能正确转换。如果 Vector 的生产者和 Vector 的消费者彼此完全隔离(想想 RPC 消息),这可能是一个致命的问题。
输入泛型。泛型尝试创建强类型类来执行泛型操作。
ArrayList<String> aList = new ArrayList<String>();
aList.add("One");
String element = aList.get(0); // no cast needed
System.out.println("Got one: " + element);
设计模式一书鼓励读者从契约的角度思考,而不是具体的类型。将变量与其实现类分离是一种智慧(和代码重用)。
考虑到这一点,您可能会认为所有实现 List 对象都应该做同样的事情:add() , get() , size()等等。稍微思考一下,您可以想象许多 List 操作的实现以各种方式遵守 List 协定(例如 ArrayList )。但是,这些对象处理的数据类型与对它们执行的操作是正交的。
把它们放在一起,你会经常看到以下几种代码:
List<String> L = new ArrayList<String>();
您应该将其理解为“L 是一种处理字符串对象的列表”。当您开始处理工厂类时,处理契约(Contract)而不是具体实现至关重要。工厂在运行时产生各种类型的对象。
使用泛型非常容易(大多数时候)。
有一天,您可能决定要实现自己的泛型类。也许您想编写一个新的数据库抽象接口(interface),以消除各种数据存储之间的差异。当您定义该泛型类时,您将使用 <t>作为将由方法操作的对象类型的占位符。
如果您仍然感到困惑,请使用 List 的泛型类,直到您感到舒服为止。稍后,您可以更有信心地深入实现。或者,您可以查看 JRE 附带的各种 List 类的源代码。开源就是这样。
看看 Oracle/Sun docs about generics . 干杯。
关于Java 泛型 : List, 列表<对象>、列表<?>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/490091/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request