当前位置: 首页 > 知识库问答 >
问题:

强制类的静态部分在不实例化的情况下运行

常培
2023-03-14

我有一门课:

public class TextViewAttachedProperties {
    public static final String NAMESPACE = "http://schemas.android.com/apk/lib/com.zworks.mvvmandroid";

    private static final Handler uiHandler = new Handler(Looper.getMainLooper());

    private static final String DATA_CONTEXT = "DataContext";
    private static final String TEXT = "Text";

    private static final Listener<PropertyChangedEventArgs<String>> textChanged = new Listener<PropertyChangedEventArgs<String>>() {

        @Override
        public void onEvent(final PropertyChangedEventArgs<String> args) {
            final TextView element = (TextView) args.getSource();

            if (element != null && args.getNewValue() != null)
                uiHandler.post(new Runnable() {

                    @Override
                    public void run() {
                        element.setText(args.getNewValue());
                    }
                });
        }
    };

    // This two statements have side effects I'm counting on to execute
    private static final AttachedProperty<Object> dataContext = AttachedProperty
        .newProperty(DATA_CONTEXT, NAMESPACE, TextView.class, null); 
    private static final AttachedProperty<String> text = AttachedProperty
        .newProperty(TEXT, NAMESPACE, TextView.class, "", textChanged);
}

问题是,只有我实例化了那个类,它才会运行。

不管怎样,我怎么能强迫它运行呢?

共有2个答案

惠文彬
2023-03-14

静态初始化块在JVM第一次看到类的提及时运行。也就是说,当类加载时。

您不需要创建实例,但您确实需要以某种方式提及/引用类。有很多方法可以做到这一点。

姜德泽
2023-03-14

使用

Class.forName("TextViewAttachedProperties");

javadoc声明

返回与给定字符串名称的类或接口关联的Class对象。调用此方法相当于:

Class.for名称

其中currentLoader表示当前类的定义类加载器。

其中true指定

初始化-是否必须初始化类

初始化类时,将执行静态初始化器,并初始化静态字段。

还有其他初始化类型的方法,例如访问该类型的static非常量变量、调用该类的static方法或实例化该类。它们都在Java语言规范中描述。或多或少

 类似资料:
  • 我正在尝试将ChromeOptions传递给我的驱动程序以允许弹出窗口。我将TestNG与@BeforeClass、@Test和@AfterClass注释一起使用。。我正在尝试启用弹出窗口,并且使用以下方法成功地实现了这一点。 虽然这确实有效,但它会打开webdriver,然后打开另一个带有选项的驱动程序。我不希望出现两个Web驱动程序。。我只想把这些选项传递给第一个webdriver!我使用一个

  • 如下面的代码所示,我可以调用非静态成员函数 ,而无需实例化该类的对象。仅当函数未绑定到任何其他成员时,这才有可能。例如,我不能以类似的方式调用。 在我看来,如下代码所示的调用的行为就像调用静态成员函数。这样的结论正确吗?这种行为如何证明是正当的?

  • 我有以下代码: 到目前为止,代码还可以,但我无法在主方法中实例化'in',比如,因为它显示

  • 我想强制子类实现我母亲类的一个实现方法。我看到了一个已实现方法的Java-Force实现,但我无法将我的母类转换为抽象类。 在这个例子中,我想强制myClass实现myMethod。 抱歉我的英语...

  • 问题内容: 我有以下代码: 到目前为止,代码还不错,但是我无法像显示的那样在main方法中实例化 我该怎么做?我不想使我的课堂静止。 问题答案: 你还必须参考其他外部类。 如果内在是静态的,那将是

  • 问题内容: 有什么方法可以避免在初始化类时调用类,例如从类方法中调用? 我试图在Python中创建一个不区分大小写和标点符号的字符串类,以进行有效的比较,但是在不调用的情况下创建新实例时遇到了麻烦。 我应该替换为什么以用切片初始化新对象? 编辑: 受到以下答案的启发,已对初始化程序进行了编辑,以快速检查是否没有参数。 问题答案: 在此示例中,使用元类提供了一个不错的解决方案。元类的用途有限,但效果