Re: passing a Factory to a method to create a generic instance
thufir wrote:
On Sat, 10 May 2008 04:48:07 +0000, thufir wrote:
This is the error:
a00720398/bedz/Bedz.java:24: incompatible types found :
java.util.List<a00720398.data.Data> required:
java.util.List<a00720398.data.Room>
rooms = FileUtil.load(roomsFile, new DataFactory());
^
1 error
It seems that load() was not defined to take whatever the type of 'roomsFile'
is. What is the type of 'roomsFile'? What is the signature of load()?
You will find that they do not match.
public class Bedz {
//deleted some stuff
public static void main (String[] args){
/* how do I pass a DataFactory()?
rooms = FileUtil.load(roomsFile, new DataFile()); //error
*/
Whoops. What's problematic:
rooms = FileUtil.load(roomsFile, new DataFactory()); //error
What use is the DataFactory? Or am I mis-using it?
Its use is to provide the object that has the actual factory method in it, so
that the called method can use it to create objects. We cannot tell if you
are misusing the object until we see how you are using the object.
Guest extends Data //Data is just the name of package
By "package", do you mean a Java package, as in 'a00720398.bedz' or 'java.util'?
Room extends Data //non-inspiring name
What is the purpose of that comment? What is the purpose of comments generally?
(These questions also apply to the comment "// deleted some stuff".)
Overall, pay attention to the method signature. That tells you what types of
variables can be used as arguments to the method. If you pass argument types
for which there is no method signature, you will get compiler errors. If you
then are perturbed because, gosh darn it, you've just got to pass those types
of arguments, then you need to provide a version of that method that, gosh
darn it, takes just those types of parameters (or supertypes of those types).
Refer to the JLS,
<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4>
generally, and particularly
<http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.2>
..
--
Lew