我想做这样的事情,但它没有明确的工作,有什么建议吗?
public HashSet<?> insert(String word, int val, HashSet<?> set) {
if (val > 30) set.add(word);
else set.add(val);
return set;
}
答案 0 :(得分:1)
您唯一能做的就是,因为您要为Set
添加值,并且您有Integer
和String
作为可能的类型(仅Object
public HashSet<Object> insert(String word, int val, HashSet<Object> set) {
if (val > 30) {
set.add(word);
} else {
set.add(val);
}
return set;
}
1}}作为一个普通的超类),是:
Set
此处的问题是,当您返回Integer
时,将强制将元素投射到某个特定类型(String
或{{1}})。可能您需要花一些时间来重新设计模型,然后尝试使用Generic类型高效地工作。
答案 1 :(得分:0)
试试这个(但不起作用):
public <T> Set<T> insert(String word, int val, Set<T> set)
{
if(val > 30)
{
set.add(word);
}
else
{
set.add(val);
}
return set;
}
顺便说一下,这个方法里面的代码只适用于Set<Object>
,这有点破坏了泛型。
编辑:的确,它不起作用,因为T需要绑定扩展String和Integer,这是不可能的。
通用的方式如下:
public <T> Set<T> insert(T t, Set<T> set)
{
set.add(t);
return set;
}
这样,您只能将特定类型的元素放入Set中,这样您在检索它们时就不需要进行强制转换。例如,
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
insert("Hello", set);
insert("World!", set);
for(String string : set)
{
System.out.println(string);
}
insert(562, set); //won't compile because it allows only strings
}