您可能会问,为什么我要这样做 - 这是因为我正在使用一个类(来自外部库),它在静态初始化程序中执行操作,我需要知道它是否已经完成.
我看了看ClassLoader,但没有找到任何看起来有用的东西.有任何想法吗?
是否可以在Kotlin类中初始化块companion object之前init?如果是这样,怎么样?如果没有,有没有办法完成同样的事情.
我有以下场景,
class A(val iname: String) {
init {
foo.add(this)
}
companion object B {
@JvmField val STATIC = A("hi")
@JvmField val foo = mutableListOf<A>()
}
fun printAllStatics() {
for (a in foo) {
print(a.iname)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且调用printAllStatics导致空指针异常.
我知道,从C++ 03标准来看,函数范围静态初始化不保证是线程安全的:
void moo()
{
static std::string cat("argent"); // not thread safe
...
}
Run Code Online (Sandbox Code Playgroud)
最终提供标准线程支持的C++ 0x标准,是否需要线程安全的函数范围静态初始化?
我最近收到了这个警告(VC++ 2010)
warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
我假设这是关键部分.我的操作系统课程已经有一段时间了,所以我无法弄清楚这意味着什么.如果我没记错的话,关键部分可以使用共享资源.那么这个警告是如何相关的呢?它究竟意味着什么?
c++ msvcrt visual-studio-2010 critical-section static-initializer
我有一个由执行文件处理的类实现的接口,比如搜索或其他什么.
public interface FileProcessorInterface {
public void processFile(String fileName);
}
Run Code Online (Sandbox Code Playgroud)
然后我对每种文件类型都有不同的实现:
public class TxtProcessor implements FileProcessorInterface {
@Override public void processFile(String fileName) { //do the work }
}
Run Code Online (Sandbox Code Playgroud)
因此我有处理器的Utilizer,它有一个允许注册每个类的方法,如下所示:
class Utilizer {
Map <String, Class> registered = new HashMap<>();
public void registerClass(String fileExt, Class clazz) {
registered.put(fileExt, clazz);
}
public void processFile(String fileName) {
//1) get the registered class from registered map (omitted because easy and not relevant)
//2) create an instance of the class using reflection (omitted because easy …Run Code Online (Sandbox Code Playgroud) 我有几个课程,如下所示
public class TrueFalseQuestion implements Question{
static{
QuestionFactory.registerType("TrueFalse", "Question");
}
public TrueFalseQuestion(){}
}
Run Code Online (Sandbox Code Playgroud)
...
public class QuestionFactory {
static final HashMap<String, String > map = new HashMap<String,String>();
public static void registerType(String questionName, String ques ) {
map.put(questionName, ques);
}
}
public class FactoryTester {
public static void main(String[] args) {
System.out.println(QuestionFactory.map.size());
// This prints 0. I want it to print 1
}
}
Run Code Online (Sandbox Code Playgroud)
如何更改TrueFalseQuestion类以便始终运行静态方法,以便在运行main方法时得到1而不是0?我不希望主方法有任何改变.
我实际上是在尝试实现子类向工厂注册的工厂模式,但我已经简化了这个问题的代码.
我重构了一个类,并将一些代码从构造函数移动到静态初始化程序.我应该怎么处理构造函数上的javadoc?是否可以将javadoc添加到静态初始化程序?
我已经阅读了C#语言规范(v5.0)的相关部分,但我找不到与我所看到的相关的部分.
如果您运行下面的代码,您将看到下面的输出,这是我所期望的:
using System;
class Test {
static int count = 0;
static void Main() {
Console.WriteLine("In Main(), A.X=" + A.X);
}
public static int F(string message) {
Console.WriteLine(message);
A.X = ++count;
Console.WriteLine("\tA.X has been set to " + A.X);
B.Y = ++count;
Console.WriteLine("\tB.Y has been set to " + B.Y);
return 999;
}
}
class A {
static A() { }
public static int U = Test.F("Init A.U");
public static int X = Test.F("Init A.X");
}
class B { …Run Code Online (Sandbox Code Playgroud)