To take this a bit further: Platform can be an Enum, that implements an IPlatform interface, and you can attach methods to BLACKBERRY and friends to do the platform-specific stuff.
Then this becomes: Platform.OS.doStuff(); And you don't have to touch it when you add a new platform. On Aug 3, 6:55 pm, dm1973 <david050...@gmail.com> wrote: > if (Platform.OS == BLACKBERRY){ > // DO blackberry > > }else{ > // DO JAVA > } > > class Platform{ > static final int OS = BLACKBERRY; > > } > > The only trick part is doing the imports. Stub classes are a one way. > Interfaces (don't worry about the performance overhead. Count on the > JIT to optimize the code until it is proven to be a problem. HotSpot > is great at optimizing simple cases like this. I expect Dalvik will be > also in another year) are another way. You could also do a build > system approach (include different versions depending on what you are > doing). Even in C/C++ #define code like this is rarely the best way to > go. I always put platform specific code in platform specific files. > Some of that is personal preference but my team found it much easier > to maintain. > > On Aug 3, 1:39 pm, Leigh McRae <leigh.mc...@lonedwarfgames.com> wrote: > > > > > On 8/2/2010 10:49 PM, Bob Kerns wrote:> First of all -- if you want to list > > the faults of the C language, the > > > preprocessor is very near the top. > > > Just your opinion. > > > That's why C++ went to great lengths to mostly remove the need for > > > using it, with inline functions, constants, and the like. > > > Now your just talking specifically about macros which still can be > > useful and there are somethings that can only be done using a macro.> It's > > too bad they didn't remove it. It causes all kinds of difficulty > > > for tools. The tools for Java are generally far better than for C++ -- > > > and the lack of a preprocessor to screw up and ambiguate the > > > interpretation of any piece of syntax you look at, is a huge part of > > > the reason. > > > MS tools destroy what Java has to offer IMHO. Only the re-factoring is > > better for Java. It's all opinion either way. > > > I think you have to realize that preprocesing is just a tool and isn't > > to be used to solve all problems. Just because I want a hammer doesn't > > mean I regard every issue as being a nail. It's very appropriate to > > handle cross platform issues, hardware issue, diagnostic code etc. All > > of these issues are very relevant to Android. Sure these issues might > > be handled differently for a desktop solution where resources aren't as > > big of an issue. > > > Why force everyone to do it the so called right way? Why does C# have > > conditional compile? Just because SUN chose not to support > > preprocessing in javac doesn't mean they aren't behind it. Maybe they > > chose to support it through tools so that j2me code would still work > > with j2se? That would make a lot of sense to me. For something they > > aren't behind they sure put a lot of effort into it. > > > > It's also a major compilation performance hit. With a significant > > > amount of pain, you can get Visual Studio to avoid a lot of the > > > reparsing it requires, but the language basically says that to compile > > > any particular program file, you have to parse all the #includes, > > > recursively, processing the same file over and over and over again -- > > > possibly differently each and every time, because INTEGER may mean int > > > in one case, unsigned int in another, and unsigned long long in yet > > > another. > > > > And that's a problem for programmers, too. No, I don't mean a problem > > > for me, that a good C++ programmer knows how to avoid the problems. I > > > mean its a problem I've had to help MANY experienced C++ programmers > > > resolve time and time again -- often in vendor-supplied code, rather > > > than their own. Or when two different vendor's include files conflict > > > -- or one vendor's include files conflict with their own. > > > > My long experience is that every time someone tells me they need a > > > preprocessor -- there turns out to be a better way. Sometimes you > > > replace that with code generation -- but most of the time, code > > > generation isn't the ultimate solution, either. Often, proper use of > > > introspection and metadata (the annotation facility, for example) > > > provide a superior (more robust, more compact, and more maintainable) > > > solution. > > > Solve this one for me. BlackBerry has a version of atan2 that is > > fixed-point and is much faster that the Math.atan2. How can I take > > advantage of this without an interface or an extra function call? > > > public static final float VecToHeading( float x, float y ) > > { > > //#if PLATFORM_BLACKBERRY > > float fAngle = ((float)Fixed32.atand2( (int)(x * 65536.0f), > > (int)(y * 65536.0f) )) / 65536.0f; > > //#else > > //@ float fAngle = ((float)Math.atan2( x, y )) * > > 57.295779513082320876798154814105f; > > //#endif > > if ( fAngle< 0.0f ) > > return fAngle + 360.0f; > > > return fAngle; > > } > > > Here is another one. The math function is in two different packages. > > > //#if PLATFORM_BLACKBERRY > > omega = (float)net.rim.device.api.util.MathUtilities.acos( cosom ); > > //#else > > //@ omega = (float)java.lang.Math.acos( cosom ); > > //#endif > > > > And that includes the use here -- of selecting what code to run. For > > > that, often the solution lies in correct modularity of the program. > > > > Trust me -- littering your code with conditionals does not improve it. > > > Actually laying down some surgical preprocess strikes within my code has > > allowed me to finish the project without having to create more code that > > I would have to manage and pay for at run-time. > > > -- > > Leigh McRaewww.lonedwarfgames.com -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en