是否可以检查特征的对象是否已初始化?

时间:2017-05-09 00:47:50

标签: scala

我有一个特质,如

trait MyTrait {
  // blah
}

object MyTrait {
  // Check to see if OtherTrait has been used/initialized yet
  try {
    val c = Class.forName("...OtherTrait")
    println("found " + c.getName)
    . . .
  } catch {
    case classNotFoundException : ClassNotFoundException =>
      println("ClassNotFoundException: " + classNotFoundException.getMessage)
  }
}

看到OtherTrait的对象已初始化的代码是什么样的,这样我就不想将其初始化为支票的副作用?

这似乎是一个反思的事情,我知道如何检查Class.forName以查看" ... OtherTrait"可以从类加载器获得,但即使类加载器可以找到它,我想知道它是否已经初始化。也就是说,如果没有其他人使用它,我也不想使用它。

2 个答案:

答案 0 :(得分:1)

如何使用其他对象来跟踪特征的初始化状态?

onSubmit() {
//validations
this.form.updateValueAndValidity();
if (this.form.invalid) {
  Object.keys(this.form.controls).forEach(key => {
    this.form.get(key).markAsDirty();
  });
  return;
}

//call function for saving data
this.save(this.form.value);
}

[请注意,我恭敬地但强烈不同意另一个响应者的命令,即不应该在类初始化块中修改状态。这正是初始化阻止存在的原因。否则他们会有什么意义?]

答案 1 :(得分:0)

1)你永远不应该在类初始化块中放置带副作用的代码。如果代码依赖于类初始化顺序或类似的东西它违反了所有现有的编程范例。

2)如果你真的需要检查它,你可以遍历类路径中的所有.jar档案并尝试查找一个类。当然它只适用于从classpath加载的类。