Java 静态方法或实例方法中的实际代码

Java 静态方法或实例方法中的实际代码,java,static,Java,Static,我正在写一个小图书馆 公共类MyClass{ 公共静态字符串doSomethingWithString(最终字符串s){ 新的MyClass().doSomething; } 公共字符串doSomething(最终字符串s){ 返回null; } } 或者我可以这样做 公共类MyClass{ 公共静态字符串doSomethingWithString(最终字符串s){ 返回null; } 公共字符串doSomething(最终字符串s){ 返回带字符串的doSomethingWithString

我正在写一个小图书馆

公共类MyClass{
公共静态字符串doSomethingWithString(最终字符串s){
新的MyClass().doSomething;
}
公共字符串doSomething(最终字符串s){
返回null;
}
}
或者我可以这样做

公共类MyClass{
公共静态字符串doSomethingWithString(最终字符串s){
返回null;
}
公共字符串doSomething(最终字符串s){
返回带字符串的doSomethingWithString;
}
}
哪种款式比较好?它们是一样的吗

更新

谢谢你的评论和回答

这里有两门课

公共类IdEncoder{
专用静态字符串块(最终长解码){
最终StringBuilder=新StringBuilder(Long.toString(已解码));
builder.append(Integer.toString(
ThreadLocalRandom.current().nextInt(9)+1));//1-9
builder.append(Integer.toString(
ThreadLocalRandom.current().nextInt(9)+1));//1-9
builder.reverse();
返回Long.toString(
Long.parseLong(builder.toString()),Character.MAX_基数);
}
公共静态字符串encodeLong(最终长解码){
返回块(解码>>>0x20)+“-”+块(解码&0xFFFFFFFFFFL);
}
公共字符串编码(最终长解码){
返回编码长(解码);
}
}
还有另一种风格

公共类IdDecoder{
公共静态长解码长(最终字符串编码){
返回新的IdDecoder()。解码(编码);
}
公共长解码(最终字符串编码){
最终整数索引=encoded.indexOf('-');
如果(索引==-1){
抛出新的IllegalArgumentException(“错误编码:”+编码);
}

return(block(encoded.substring(0,index))如果您只是在这两个选项之间进行选择,请选择第二个选项

原因是第一个要求您在堆上分配一个新的虚拟对象来调用一个方法。如果确实没有其他区别,那么不要浪费时间和空间,只需从类中调用静态方法


第二种方法更类似于静态实用程序函数,这是一种很好的编码实践。

在编写库时,易用性明显优于一般的最佳实践。如果用户为了访问某个对象而实例化某个对象没有意义,那么您的方法应该是静态的。然而,通常情况下,它实际上更干净、更强大方法是对象的一部分,因为它允许用户(以及库编写器)在子类中重写它


从某种意义上说,你实际上并不是在问一个编程问题,而是一个用户体验问题。问问你自己,你的用户如何从访问你的代码中获得最大的好处,并以这种方式实现它。作为一个好的基准,看看;它由许多静态实用程序类组成,但也有许多设计为易于扩展的类和接口。做什么你认为最好。

你想做什么?为什么?这段代码什么都不做,所以很难给出有用的建议…我只是好奇。我目前正在做第一种风格。我想知道改成第二种风格是否会产生一些可能的影响。静态实用方法的缺点是它们很难扩展行为。当然在某些情况下,这是我们的意图,但值得考虑的是,您的类的用户可能希望扩展您定义的行为。在这种情况下,实例方法更优越。我不会不同意。使用实例方法肯定有很多次(可能大多数次).在这种情况下,可能没有必要,因为它实例化了一个默认对象,只是为了调用一些显然可以是静态的东西。