首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javacard: ant-javacard包构建中静态数组初始化的错误

Javacard: ant-javacard包构建中静态数组初始化的错误
EN

Stack Overflow用户
提问于 2022-01-01 00:52:19
回答 1查看 163关注 0票数 1

对于带有静态数组的库包,我有以下的玩具代码:

代码语言:javascript
复制
package testapplets.library;
import javacard.security.RandomData;

public class SomeLibrary {
    public static final short TRUE = (short) 0x5AA5;
    public static final short FALSE = (short) 0xA55A;

    public static final byte[] test = { 'a', 'b', 'c'};

    public static short booleantest(boolean b) {
            return b ? TRUE : FALSE;
    }

    public static RandomData getRandom() {
        return RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
    }
}

以及构建库包的以下ant任务:

代码语言:javascript
复制
  <target name="libtest" depends="prepare">
    <javacard jckit="${converter.sdk}">
      <cap targetsdk="${target.sdk}" sources="src/library" package="testapplets.library" aid="11:22:33:44:55" export="lib" output="build/libtest.cap" version="1.0"/>
    </javacard>
  </target>

但是,我收到以下错误消息:

代码语言:javascript
复制
  [convert] [ INFO: ] Converter [v3.1.0]
  [convert] [ INFO: ]     Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
  [convert]     
  [convert]     
  [convert] [ INFO: ] conversion completed with 1 errors and 0 warnings.
  [convert] error:  Static array initialization in class testapplets/library/SomeLibrary in library package not allowed.

为什么库中的静态数组有问题?如果删除静态数组,则构建良好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-01 13:19:50

如果我记得正确使用new在字段初始化是禁止在Java。您必须在静态new方法中执行install (或从install调用的方法),或者标记字段private,在这种情况下,数组存储在常量池中。我强烈建议采用后者。基本上,不允许执行static代码。

使用TRUEFALSE作为公共静态字段也不是一个好主意,因为它们是引用查找,容易受到定时预言的影响。用这种方式定义TRUEFALSE的整个想法是为了防止这样的预言和错误注入;我建议让它们成为private

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70546475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档