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

Java 我可以使用枚举元素而不是字符串将JSoup Elements类重载到getElementsByTag吗?,java,enums,overloading,Java,Enums,Overloading,我正在使用JSoup编写一些东西,这是我在别处看到的,许多方法都将字符串作为参数 这类事情让我很烦,我宁愿使用枚举值作为参数。使用HTML.Tag'enum'和.toString()方法很容易设置 然后在重载方法中,我将“enum”转换为字符串,并将其输入原始方法 所以我不打电话了: Elements allDivs = bodyElem.getElementsByTag("DIV"); 很容易出现拼写错误,不知道正确的标签名等呼叫: Elements allDivs = bodyElem.g

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

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

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

所以我不打电话了:

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
表示对象

我担心我不能这样做,因为元素可能是最终的,就像所讨论的字符串一样


那么我应该怎么做呢?

JSoup的元素类型不是final,这意味着您可以对其进行扩展,看起来您正试图使用匿名内部类对其进行扩展,但是您不能使用内部类来扩展现有对象(doc.body()返回已实例化的元素,您不能修改它)

您的选择都取决于您想要采取的方法以及成本/复杂度与效益的最佳比率

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

2.)只要记住每次将枚举类型的toString()方法传递到现有的getElementsByTag方法时,都要对其进行调用,它会更详细,但不是这样,就是将每个元素强制转换为其他元素


Java在可读性和可维护性方面避开了其他语言中的一些工具,如C#的扩展方法(它可以让您在这里做您想做的事情),不幸的是,这有时会导致像这样的边缘情况,没有它们可能会使代码有点难看。

你不能为该类使用装饰器/包装器并使用它吗?@Eugene我可以这样做,但我最终需要1)使用类似于
EnumFriendlyElement
的东西,或者2)使用与我正在重载的包相同的名称这就意味着我要寻找竞争的名称空间。这是有道理的,而我试图做的事情在其他情况下也会起作用,这就是为什么我认为它应该在这里起作用的原因。我想我必须坚持选择2,选择1对于真正的小变化来说似乎有点太多了。