我现在已经写了一些蓝牙应用程序,但我从未见过this particular approach直到最近。在示例中,他们使用 device.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
在我看来,这似乎只是说 BluetoothSocket bs = createRfcommSocket(...
.
他们的方法有什么区别
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
sock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
还有我的
sock = createRfcommSocket(.....
有理由使用其中之一吗?
谢谢
最佳答案
是的,使用getClass等就是反射。
不同之处在于,如果您输错方法名称或犯类似的错误,您可以从 IDE 和编译器获得帮助,而该代码的作者则只能靠自己。
也许他们处于编译时调用的方法不可用的情况,这可能是在允许在运行时加载新插件的软件上下文中的情况。但在这种情况下,您不会期望看到方法名称和其他详细信息硬编码到代码中。
对我来说,你的示例的文字文本看起来像是糟糕的编程。
关于java - 当我使用 getClass.getMethod(...) 时,它是 "reflection"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331392/