2

Forgive me if my terminology on "templating" is incorrect I come from a c++ background. I was having issues with the default constructor. The compiler says "identifier expected" and I'm not understanding. Anyone know the answer?

So you know, GameObject has a HashMap named 'object' that is already initialized.

import java.util.HashMap;
import java.io.Serializable; 
public class GameList<T, V> extends GameObject
{
    protected HashMap<T, V> list;
    public GameList<T, V>()
    {
        list = object;
    }
}
4

3 回答 3

2

你几乎拥有它:

public GameList()
{
    list = object;   
}

您不需要<T, V>在构造函数上重复。

于 2013-07-26T02:27:04.083 回答
2

您的代码有两个问题:

  • 您需要删除构造函数声明中的参数列表 - 与 C++ 不同,此类型参数列表是隐含的,并且
  • 如果GameObject有一个HashMap没有类型参数的对象,则需要添加类型转换:list = (HashMap<T,V>)object;
于 2013-07-26T02:28:17.963 回答
0

除了上面提到的之外,只是添加一些有用的最佳实践:

该行:

list = object;

可能是一个错误,因为对象没有作为构造函数参数传递,如果你的超类中有对象,那么在那里声明它受保护(有两个指向同一个实例的指针很可能是一个错误)。

如果您想要父类中对象的副本(我对此表示怀疑),但无论如何调用

list = new HashMap<T, V>(object);

还要避免调用List listMap 映射,甚至更糟糕的是:变量名称的Map 列表在其类型上没有任何附加值,程序阅读器不理解您的变量应该包含的内容。

同样避免List userList

最好的办法是尽可能具体以允许立即理解代码并避免不必要的注释:说出您声明的列表或映射中的内容,例如。

Map<Long, User> connectedFreindsById;
List<User> friends;

最好的问候,Zied Hamdi - http://1vu.fr

于 2013-07-26T03:30:01.053 回答