在Eclipse中,我只能使用其中一个菜单按钮来运行/调试我的项目.按F11或Ctrl+ F11不执行任何操作.我已经将Debug Last Launched映射到各种各样的键盘快捷键,看看在后台运行的另一个程序是否拦截了按键,但似乎并非如此.每个其他键盘快捷键似乎工作正常,如Ctrl+ Shift+ T或Ctrl+ G.
有帮助吗?快捷键在我的另一台计算机上工作,我本能地试图按下它,这大大降低了我的工作效率.
我很想知道一个类的泛型类型是否可以通过作为参数传递的另一个对象的泛型类型来定义?
我正在研究的是线程安全迭代器,因此多个线程可以安全地通过列表迭代,没有两个线程获得相同的对象.它的当前形式效果很好,但我认为它可以做得更好.
import java.util.Iterator;
public class AtomicIterator implements Iterator<Object>
{
private Iterator<?> it;
public AtomicIterator(Iterable<?> iterable)
{
it = iterable.iterator();
}
public Object next()
{
synchronized(it)
{
if(it.hasNext())
return it.next();
else
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
一些代码已被省略,但这应该得到了解决.目前为了获得下一个对象,您总是被迫转换返回的对象,这似乎效率低下.
ArrayList<String> someList = new ArrayList<String>;
AtomicIterator it = new AtomicIterator(someList);
String example = (String)it.next();
Run Code Online (Sandbox Code Playgroud)
问题显然是it.next()返回类型Object我想要的地方,在这个例子中,它返回类型String
简单的解决方案是给AtomicIterator它自己的泛型类型,从而产生类似的结果
ArrayList<String> someList = new ArrayList<String>();
AtomicIterator<String> it = new AtomicIterator<String>(someList);
String example = it.next();
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说似乎是多余的,someList已经明确定义了它的泛型类型String,我想要的是AtomicIterator …