从其他 class 文件引用匿名内部 class

Reference anonymous inner class from other class file

大家好,我可以在其他 class 中引用或使用这个匿名内部 class 吗?

private DgtebdllLib.CallbackFunctionCharPtr getScan = new DgtebdllLib.CallbackFunctionCharPtr()

完整代码在下面,我找到了这个 Java 代码 here。这是使用 Java 与 DGT 棋盘 DLL 接口的示例。 我只是想从 getScan 匿名内部 class 获取数据 str String 变量。非常感谢任何help/suggestions。谢谢

public class DemoDll
{
    private static boolean running = true;
    private static DgtebdllLib dll = null;

    /**
     * Callback implementation function for the received status
     */
    private DgtebdllLib.CallbackFunctionCharPtr getStatus = new DgtebdllLib.CallbackFunctionCharPtr()
    {
        @Override
        public void callback(Pointer data)
        {
            String str = data.getString(0);
            System.out.println("Received status: " + str);
        }
    }; 

    /**
     * Callback implementation function for the evaluation of the received scan
     */
    private DgtebdllLib.CallbackFunctionCharPtr getScan = new DgtebdllLib.CallbackFunctionCharPtr()
    {
        @Override
        public void callback(Pointer data)
        {
            String str = data.getString(0);
            System.out.println("Received a scan: " + str);
        }
    };

class 是匿名 的本质是您不能通过名称引用它。不过,通常情况下,使用其超类型的静态类型来引用其 实例 就足够了。

有一种理论上的迂回方式可以通过其二进制名称反射性地引用匿名 class,但不推荐这样做。

看来你问错了问题。回调封装了一个action,你所要做的就是实现想要的动作。所以如果你想存储接收到的数据,就存储它,例如在外部实例中:

public class DemoDll {
    private static boolean running = true;
    private static DgtebdllLib dll = null;

    String status;
    String scan;

    /**
     * Callback implementation function for the received status
     */
    private DgtebdllLib.CallbackFunctionCharPtr getStatus
     = new DgtebdllLib.CallbackFunctionCharPtr() {
        @Override
        public void callback(Pointer data) {
            status = data.getString(0);
            System.out.println("Received status: " + status);
        }
    }; 

    /**
     * Callback implementation function for the evaluation of the received scan
     */
    private DgtebdllLib.CallbackFunctionCharPtr getScan
     = new DgtebdllLib.CallbackFunctionCharPtr() {
        @Override
        public void callback(Pointer data) {
            scan = data.getString(0);
            System.out.println("Received a scan: " + scan);
        }
    };

    …

现在您可以访问回调收到的最新 statusscan 值,而无需任何特殊的“访问匿名内部 classes”功能。

或者,您可以通过成员 class 访问这些值,该成员 不是 匿名的:

public class DemoDll {
    private static boolean running = true;
    private static DgtebdllLib dll = null;

    static class StringRef implements DgtebdllLib.CallbackFunctionCharPtr() {
        String value;

        @Override
        public void callback(Pointer data) {
            value = data.getString(0);
            System.out.println("Received: " + value);
        }
    }
    StringRef status;
    StringRef scan;

    …

那么你可以使用 statusscan 作为回调,然后阅读 status.valuescan.value