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

时间:2015-01-27 14:21:17

标签: java java-native-interface chess

大家好,无论如何我可以在其他课程中引用或使用这个匿名的内部课程吗?

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

完整的代码如下,我发现了这个Java代码here。这是使用Java与DGT棋盘DLL连接的示例。 我只想从getScan匿名内部类获取数据str String变量。任何帮助/建议深表感谢。感谢

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);
        }
    };

2 个答案:

答案 0 :(得分:1)

看来你问的是错误的问题。回调封装了操作,您所要做的就是实现所需的操作。因此,如果您想存储收到的数据,只需存储它,例如在外部实例中:

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值,而无需任何特殊的“访问匿名内部类”功能。

或者,您可以通过匿名的成员类来访问这些值:

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

答案 1 :(得分:0)

匿名类的本质是你不能通过名字来引用它。但是,通常,使用其超类型的静态类型引用其实例就足够了。

有一种通过其二进制名称反射性地引用匿名类的一种迂回,迂回的方式,但不建议这样做。