gpt4 book ai didi

java - 我可以使用枚举元素而不是字符串将 JSoup Elements 类重载为 getElementsByTag 吗?

转载 作者:行者123 更新时间:2023-12-01 13:38:12 24 4
gpt4 key购买 nike

我正在使用 JSoup 编写一些东西,这是我在其他地方看到的,许多方法都将字符串作为参数。

这类事情让我烦恼,我宁愿使用枚举值作为参数。使用 HTML.Tag 'enum' 和 .toString() 方法可以轻松设置。

然后在我的重载方法中,我将“枚举”转换为字符串并将其输入到原始方法中。

所以我会不再打电话:

Elements allDivs = bodyElem.getElementsByTag("DIV");

调用时容易出现拼写错误和不知道正确的标签名称等:

Elements allDivs = bodyElem.getElementsByTag(HTML.Tag.DIV))

但我不知道如何重载 getElementsByTag 来获取 HTML.Tag 参数。

我已经尝试过这个:

    Element bodyElem = doc.body(){
Elements getElementsByTag(HTML.Tag tag){
return getElementsByTag(tag.toString());
}
};

但这行不通。指定 this.getElementsByTag 指的是持有类(例如 HTMLReader,这是我编写的),而 super.getElementsByTag 指的是 Object。

我担心我不能这样做,因为 Element 可能是最终的,就像 this 中的字符串一样问题。

那么我应该如何去做呢?

最佳答案

JSoup 的 Element 类型不是最终的,这意味着您可以扩展它,看起来您正在尝试使用匿名内部类来扩展它,但是您不能使用内部类来扩展现有对象(doc.body() 返回一个已经实例化的 Element,您无法修改它)。

您的选择完全取决于您想要采取的方法以及似乎具有最佳成本/复杂性与 yield 比的方法。

1.) 直接扩展 Element 类,并将 doc.body() 的结果转换为包含重载的 getElementsByTag 方法的新类型。

2.) 只要记住每次将枚举类型传递到现有的 getElementsByTag 方法时,都要对枚举类型调用 toString() 方法,这会更冗长,但要么就是这样,要么将每个 Element 转换为其他内容。

为了可读性和可维护性,Java 避开了其他语言中的一些工具,例如 C# 的扩展方法(这将让您在这里完全按照您想要的方式进行操作),不幸的是,有时会导致像这样的边缘情况,没有它们可能会使代码变得有点 clown 陋。

关于java - 我可以使用枚举元素而不是字符串将 JSoup Elements 类重载为 getElementsByTag 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com