Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #7607
| 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> |
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 | Next — Previous in thread | Next in thread | Find similar
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