我一直试图扩展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)
没有成功,如果我使用类名后面的子对象它似乎工作,但由于某种原因隐藏子对象类中的方法.
任何有关如何使这项工作正常的想法或建议都值得赞赏.
我不确定如何描述我想要的东西.我想定义一个函数,其参数是本地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的最后一个值;
有没有办法/如何创建一个函数,参数是我在指定函数时的值...如果这有意义的话.
我今天在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) 我正在寻找迭代的递归方法.
我有一个我想要迭代的对象列表,然后检查它们的子对象.
递归:
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 ×2
javascript ×2
closures ×1
collections ×1
extends ×1
function ×1
hashset ×1
html ×1
iterator ×1