从其他 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);
}
};
…
现在您可以访问回调收到的最新 status
和 scan
值,而无需任何特殊的“访问匿名内部 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;
…
那么你可以使用 status
和 scan
作为回调,然后阅读 status.value
和 scan.value
。
大家好,我可以在其他 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);
}
};
…
现在您可以访问回调收到的最新 status
和 scan
值,而无需任何特殊的“访问匿名内部 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;
…
那么你可以使用 status
和 scan
作为回调,然后阅读 status.value
和 scan.value
。