Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #7607

Re: simple method to simulate function pointers in java

From Lew <lewbloch@gmail.com>
Newsgroups comp.lang.java.programmer
Subject Re: simple method to simulate function pointers in java
Date 2011-09-05 19:00 -0700
Organization http://groups.google.com
Message-ID <39f8a144-5eaa-4b7f-b335-efb75539ff95@glegroupsg2000goo.googlegroups.com> (permalink)
References <94e54cff-4dab-4c82-ade8-736174705e51@s2g2000vby.googlegroups.com> <4e657653$0$304$14726298@news.sunsite.dk>

Show all headers | View raw


Arne Vajhøj wrote:
> Lino Ferrentino wrote:
>> Maybe there are other methods... I use this:
>>
>> public final class b_callbacks {
>>
>>      private b_callbacks(){
>>      }
>>
>>
>>      public static interface void_f_void{
>> 	public void f();
>>      }
>>
>>      public static interface void_f_int{
>> 	public void f(int i);
>>      }
>>
>>
>> }
>>
>> ----
>>
>> when I want to use a function pointer
>>
>> import b_callbacks.void_f_int;
>>
>> private void_f_int my_callback;
>>
>> my_callback = new void_f_int(){
>>   public void f(int i){
>>     //code
>>   }
>> };
>>
>> to call the callback
>>
>> my_callback.f(42);
>>
>>
>> ====
>>
>> For each function pointer type we create an interface.
> 
> It is perfectly valid.
> 
> You need to note two things:
> 1) the codes is not following Java coding convention
> 2) it is based on an assumption that all functions with
>     the same signature are interchangeable - that is not
>     very type safe

The Java idiom is to use a functor, typically a single-abstract-method (SAM) interface, and pass an instance of that functor type to the object needing a callback or similar method.  The object implementing the functor interface is the called-back object.

And as Arne says, do follow the coding conventions.  Your code was nearly impenetrable.  You name things by purpose in Java, not by implementation type.

Roughly (very roughly)_speaking, the functor pattern is something like:

public interface Updater
{
  public void update( Information info );
}

============

public class SomethingThatUpdates
{
  private final List <Updater> updaters = new ArrayList <> ();

  public void addUpdater( Updater updater )
  {
    updaters.add( updater );
  }

  public void doUpdates()
  {
    Information info = obtainInformationSomehow();
    for( Updater upd : updaters )
    {
      upd.update( info );
    }
  }

  // etc.
}

============

public class SomethingToUpdate implements Updater
{
  public void init( SomethingThatUpdates something )
  {
    something.addUpdater( this );
  }

  public void update( Information info )
  {
    // do something useful with 'info'
  }

  // etc.
}

============

-- 
Lew

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

simple method to simulate function pointers in java Lino Ferrentino <lino.ferrentino@gmail.com> - 2011-09-02 01:54 -0700
  Re: simple method to simulate function pointers in java Mayeul <mayeul.marguet@free.fr> - 2011-09-02 11:56 +0200
  Re: simple method to simulate function pointers in java Patricia Shanahan <pats@acm.org> - 2011-09-02 03:17 -0700
    Re: simple method to simulate function pointers in java Lino Ferrentino <lino.ferrentino@gmail.com> - 2011-09-02 05:11 -0700
      Re: simple method to simulate function pointers in java Arne Vajhøj <arne@vajhoej.dk> - 2011-09-05 21:21 -0400
  Re: simple method to simulate function pointers in java Roedy Green <see_website@mindprod.com.invalid> - 2011-09-02 07:43 -0700
  Re: simple method to simulate function pointers in java Arne Vajhøj <arne@vajhoej.dk> - 2011-09-05 21:24 -0400
    Re: simple method to simulate function pointers in java Lew <lewbloch@gmail.com> - 2011-09-05 19:00 -0700
      Re: simple method to simulate function pointers in java "John B. Matthews" <nospam@nospam.invalid> - 2011-09-06 13:39 -0400

csiph-web