大家好,无论如何我可以在其他课程中引用或使用这个匿名的内部课程吗?
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);
}
};
答案 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);
}
};
…
现在,您可以访问回调收到的最新status
和scan
值,而无需任何特殊的“访问匿名内部类”功能。
或者,您可以通过不匿名的成员类来访问这些值:
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
。
答案 1 :(得分:0)
匿名类的本质是你不能通过名字来引用它。但是,通常,使用其超类型的静态类型引用其实例就足够了。
有一种通过其二进制名称反射性地引用匿名类的一种迂回,迂回的方式,但不建议这样做。