我能否创建一个静态方法,该方法接受一个实例并返回映射对象?

3

如果我问了一个愚蠢的问题,请原谅。我有一个方法,它接受一个对象,将其转换为地图并返回地图对象。它不访问任何声明该方法的类的实例变量。

logger再次是一个静态字段。

public Map<String, Object> createDocumentMap(final DocId docId) {

        logger.debug("Creating document map...");
        Map<String, Object> documentMap = new HashMap<String, Object>();
        documentMap.put("docNumber", docId.getDocNo());
        documentMap.put("docRev", docId.getDocRev());

        logger.debug("Document map ready. " + documentMap);

        return documentMap;
    }

我阅读了有关静态方法与非静态方法的许多帖子,但我仍然不确定是否应将其声明为静态方法。


1
简短回答:是的,你可以。你试过了吗?只需将方法声明为public static Map<String, Object> crea..即可。 - Arnaud Denoyelle
声明方法是否为静态取决于您的需求。如果您将方法声明为静态,则可以使用类名调用此方法,否则必须通过实例变量调用此方法。 - Ashish Jagtap
@ArnaudDenoyelle 如果这个静态方法再次调用另一个静态方法,会有什么影响吗? - Krishna Chaitanya
1
@KrishnaChaitanya 不是的 :) 如果这个方法不是静态的话,那就是一种不好的实践。 - Arnaud Denoyelle
@ArnaudDenoyelle 是的,你说得对。另一种方法也是静态的。谢谢 :) - Krishna Chaitanya
4个回答

1

这取决于你如何使用这个方法。如果你只在实例内部使用它,它应该保持实例方法。 由于这个方法不依赖于任何实例变量,你可以将其更改为静态的。如果你要从其他对象中使用这个方法,请这样做。 在这种情况下,你也可以考虑将这个方法移动到某个实用程序类中。


0
在类中将地图声明为静态属性。
public static Map<String, Object> documentMap = null;

在你的方法中进行初始化。

documentMap = new HashMap<String, Object>();

所以...你创建了一个静态公共变量,它不是final(可以为null),并且你在一个公共的非静态方法中分配了引用(使其成为void?!)。你几乎无法让它更糟糕了。 - gyorgyabraham

0

如果它不依赖于任何实例变量(字段)或方法,那么你可以这样做。否则你就不能。

在实践中,static 方法通常用于一般目的的实用程序类,这些类不仅仅依赖于参数而不是上下文。


0

正如您所提到的,您的方法使用实例变量,因此您无法使使用实例变量/对象的方法静态化。


我提到了这个方法不使用它所声明的类的任何实例变量。 - Krishna Chaitanya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接