0
votes

There was an answer similar to this here: How to pass a function as a parameter in Java?

but the correct answer provided does not work. I have a class:

public class randomClass {
  2 
  3         public String name;
  4         private int x;
  5         private boolean y;
  6 
  7         public randomClass(String name){
  8                 this.name = name;
  9                 setAttributes(1,true, "test");
 10                 System.out.println(x + "," + y);
 11         } 
...
 21 
 22         public int xMethod(){
 23                 return 1;
 24         }
 25 
 26         public void passMethod(){
 27                 testMethod(new Callable<Integer>() {
 28                                 public Integer call(){
 29                                         return xMethod();
 30                                 }
 31                 });
 32         }
 33 
 34         public void testMethod(Callable<Integer> myFunc){
 35 
 36         }

Inside function passMethod I'm trying to pass xMethod into testMethod, but the error I get is:

cannot find symbol
symbol : class Callable

and I'm not sure why.

Also, I tried using return type String for xMethod, can you pass a function with different return types then Integer?

1
Did you import java.util.concurrent.Callable? (I am assuming this is the class you are looking for) - amit
@amit: the interface of 'java.util.concurrent.Callable' is ok for the case, but it would also suggest a concurrency context, which I don't necessarily see here. Something like guava's Function interface would be of more general use. - nansen

1 Answers

0
votes

I think you need to import Callable as import java.util.concurrent.Callable; and then implement it in your class before using it.

Check here:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Callable.html

http://kamleshkr.wordpress.com/2009/10/02/java-threads-callable-and-future/