Skip to content
Advertisement

Is there a way to take an argument in a callable method?

I have created a piece of code which takes an IP address (from main method in another class) and then loops through a range of IP addresses pinging each one as it goes. I have a GUI front end on this and it was crashing (hence why I’ve done the multithreading. My problem is I can no longer take the IP address as an argument in my ping code as its callable. I’ve searched all over for this and cant seem to find a way to get round this. Is there a way for a callable method to take arguments? If not is there any other way to accomplish what I’m trying to do?

sample of my code:

JavaScript

IPtoPing used to be the argument that was taken.

Advertisement

Answer

You can’t pass it as the argument to call() because the method signature doesn’t allow it.

However, you can pass the necessary information as a constructor argument; e.g.

JavaScript

(I’ve corrected a couple of egregious code style violations!!)

There are ways to eliminate some of the “boilerplate” coding in the above (see some of the other answers). In this case we are talking about 4 lines of code (in a ~40 line class), so I am not convinced that it is worth the effort. (But hey, it is your code.)

Alternatively, you could:

  • declare DoPing as an inner class (or a lambda) and have it refer to a final ipToPing in the enclosing scope, or

  • add a setIpToPing(String ipToPing) method.

(The last allows a DoPing object to be reused, but the downside is that you will need to synchronize to access it thread-safely.)

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement