我只是从Java开始。
我想知道是否存在一种添加方法的方法,以便任何String都可以调用该方法,类似于我们现在可以string1.equals(string2)
使用string1.equalsOr(string2, string3, string4, string5)
的方式。
我知道我可以创建自己的静态方法,但是想知道是否可以将其用于任何字符串。
答案 0 :(得分:5)
string1.equalsOr(string2, string3, string4, string5)
可以很容易地写为(Java 9 +)
Set.of(string2, string3, string4, string5).contains(string1)
或(Java 9 +)
List.of(string2, string3, string4, string5).contains(string1)
或(Java 8 +)
Stream.of(string2, string3, string4, string5).anyMatch(string1::equals)
或(任何Java)
Arrays.asList(string2, string3, string4, string5).contains(string1)
答案 1 :(得分:4)
如果要检查string1
与一组字符串string2, string3, string4, string5
是否相等。最好使用任何集合(即Set
或List
)。例如,如果您使用
Arrays.asList(string2, string3, string4, string5).contains(string1)
它将为您带来预期的结果。
答案 2 :(得分:2)
在Java中,您无法以所需的方式扩展String
类。
这是其他jvm语言能够执行的操作,但是在某种程度上是接受String
和参数的静态方法。
但是,除了静态方法外,您可以做的是创建一个在构造过程中接受String
的类,然后将所需的方法添加到该类中。
这样,您就可以在Java基本代码之上创建具有自己的逻辑的自己的类型。
答案 3 :(得分:1)
不。您不能以这种方式修改String
类。
使它可用于任何字符串将有效地创建该静态方法,因为只有在 you 调用它时,您才能使用此构造。
答案 4 :(得分:1)
您不能使用Java,您的愿望是改型“ String”类,这几乎是不可能的(您实际上可以编辑String的源代码并重新编译Java jar,但我不确定会起作用的。)
另一方面,您绝对可以使用Groovy。 Groovy可以直接使用大多数Java代码,但是增加了额外的功能,例如将新方法改造为现有类的功能。 Groovy大量使用此功能来实现“ new File(“ file”)。getText()”之类的功能,以字符串形式获取文件的整个文本。
通常这很好,因为在groovy和Java之间来回切换非常容易-一旦您将构建配置为使用groovy,通常就可以将.java文件重命名为.groovy并从groovy开始使用groovy功能。理解大多数Java代码,无需更改。
PS:这只是您可以做的,而不是您应该做的,除非向现有类中添加方法的想法真的很吸引您。
答案 5 :(得分:1)
否,您不能更改TreeView
类。但是,对于Java 8+,您可以按照以下方式进行操作
String
确定Stream.of(foo, foo2, foo3).anyMatch(e -> e.equals(string));
是否等于传递给string
的任何参数。这不像简单的Stream.of()
方法那样漂亮,但是它仍然可以完成工作而不必编写自己的方法