小编She*_*oss的帖子

如何参数化扩展集合

我一直试图扩展ArrayList类没有太大的成功.我想扩展它,并能够参数化它.

通常你有类似的东西

ArrayList<SomeObject> list = new ArrayList<SomeObject>();
Run Code Online (Sandbox Code Playgroud)

我想要

MyList<SomeObject> list = new MyList<SomeObject>();
Run Code Online (Sandbox Code Playgroud)

简单地扩展ArrayList不起作用.

public class MyList extends ArrayList ...
Run Code Online (Sandbox Code Playgroud)

当我尝试使用它时,我得到了错误

MyList类型不是通用的; 它不能使用参数<SomeObject>进行参数化

我尝试过变种

public class MyList extends ArrayList<Object>
public class MyList<SubObject> extends ArrayList<Object>
Run Code Online (Sandbox Code Playgroud)

没有成功,如果我使用类名后面的子对象它似乎工作,但由于某种原因隐藏子对象类中的方法.

任何有关如何使这项工作正常的想法或建议都值得赞赏.

java collections extends parameterized

4
推荐指数
1
解决办法
1663
查看次数

创建具有值参数而不是引用的函数引用

我不确定如何描述我想要的东西.我想定义一个函数,其参数是本地VALUE而不是引用.

说我有我想要创建的对象列表

for(i = 0; i < 10; i++){
  var div = document.createElement("div");
  div.onclick = function(){alert(i);};
  document.appendChild(div);
}
Run Code Online (Sandbox Code Playgroud)

现在我相信这个例子,无论我点击什么div,它都会提醒"10"; 因为那是变量i的最后一个值;

有没有办法/如何创建一个函数,参数是我在指定函数时的值...如果这有意义的话.

javascript closures function parameter-passing

3
推荐指数
1
解决办法
350
查看次数

Javascript getElementsByTagName打破了firefox?

我今天在Firefox中遇到了最奇怪的Javascript问题.

我正试图操纵一些表行,但.getElementsByTagName("tr");正在拉回垃圾.

dynamicTable.tableBody = dynamicTable.getElementsByTagName("tbody")[0];
var tableRows = dynamicTable.tableBody.getElementsByTagName("TR");
var actualTableRows = new Array();
for(var i in tableRows) {
    var row = tableRows[i];
    alert(row.tagName);
    if(row.tagName == "TR"){
       actualTableRows.push(row);
    }
}
dynamicTable.bodyRows = actualTableRows;
Run Code Online (Sandbox Code Playgroud)

令人费解的部分当然是我修复错误的临时黑客.出于某种原因,.getElementsByTagName("tr")也撤回了一些功能.

很明显,上面的警报类似于"TR TR TR TR undefined undefined undefined".

我想要的代码是这样的

dynamicTable.bodyRows = dynamicTable.tableBody.getElementsByTagName("tr");
Run Code Online (Sandbox Code Playgroud)

但是后来bodyrows不仅包含<tr>元素,它还有上面提到的垃圾.

有什么想法吗?

编辑:如果我只使用第二个代码块,我会在一个有21个表行(tr元素)的表上得到一个24个元素的列表.第一个代码块只是解决问题的黑客攻击.

如果我改变警报,alert(row)我得到:

[object HTMLTableRowElement]
...

function item() {
    [native code]
}

21

function namedItem() {
    [native code]
}
Run Code Online (Sandbox Code Playgroud)

html javascript getelementsbytagname

3
推荐指数
1
解决办法
2755
查看次数

在迭代java期间修改集合

我正在寻找迭代的递归方法.

我有一个我想要迭代的对象列表,然后检查它们的子对象.

递归:

doFunction(Object)
while(iterator.hasNext())
{
   //doStuff
   doFunction(Object.subObjects);
}
Run Code Online (Sandbox Code Playgroud)

我想把它改成这样的东西

doFunction(Object)
iIterator = hashSet.iterator();
while(Iterator.hasNext()
{
   //doStuff
   hashSet.addAll(Object.subObjects);
}
Run Code Online (Sandbox Code Playgroud)

抱歉可怜的伪代码,但基本上我想迭代子对象,同时将新对象附加到列表末尾进行检查.

我可以使用列表执行此操作,并执行类似的操作

while(list.size() > 0)
{
   //doStuff
   list.addAll(Object.subObjects);
}
Run Code Online (Sandbox Code Playgroud)

但我真的不想添加重复的子对象.当然我可以在添加它之前检查list.contains(每个subObject)是否正确.

但我很想用套装去完成那个清洁工.

所以基本上是在迭代它时附加到一个集合,或者是否有更简单的方法使List像集合一样而不是手动检查.contains()?

任何评论都表示赞赏.

谢谢

java iterator hashset

2
推荐指数
1
解决办法
6794
查看次数