静态方法导致问题

时间:2010-08-30 07:32:42

标签: java methods static

我有一个静态方法如下:

public static void writeArticle(TypeA typeA, TypeB typeB) {
  AWriter writer =  AFactory.getWriter("aWriter");
  Article article = writer.newArticle();

  /* PARAMETER WRITE START */

  article.set("title", typeA.getTitle());
  article.set("author", typeB.getName());
  article.set("age", typeB.getAge());
  // …
  /* more set statments here */
  writer.write(article);
}

这种方法是否会导致编写者编写值混合文章的问题?也就是说,当调用此方法的2个类(A类和ClassB)实例时,Article会从ClassA中获取一些typeA值吗?从ClassB中获取一些值?

7 个答案:

答案 0 :(得分:5)

没有。为什么你认为来自两个不同调用的参数会混淆?没有理由认为他们愿意。

如果这是一个多线程程序,你应该小心在线程之间共享对象;如果这些对象具有可变状态(可以更改的成员变量),则应注意两个线程不会同时修改状态。

答案 1 :(得分:4)

每当你说static时,你都不会谈论实例方法调用。应始终使用类名调用静态方法。

静态方法在实例级别完全隔离。即使它可能写出一个混合值,但它是你想要它写的不是吗?

答案 2 :(得分:3)

不,方法参数和局部变量是线程安全的,只要它们不引用共享对象

答案 3 :(得分:0)

没有。否则这将是地狱。

答案 4 :(得分:0)

只有当两个呼叫都被访问并且改变了公共状态时才会出现这种情况。假设定义此方法的类称为ArticleWriter,它们将读取和更改ArticleWriter的静态字段。

答案 5 :(得分:0)

这对你的代码来说是不可能的。 typeA方法getTitletypeB方法getName。哪些领域变得混乱?

答案 6 :(得分:0)

从这段代码片段中无法知道。要解决的第一个问题是,是否可以同时从两个不同的线程调用此方法。如果是这样,问题很可能是两个线程同时修改同一个对象(文章或作者)。解决这个问题的最简单方法是同步writeArticle()。