Sect. 18) How can you send a function pointer as an argument?
Java Programmer's FAQ - Part DSimple answer: use a "callback". Make the parameter an interface and pass an argument instance that implements that interface. public interface CallShow { public void Show( ); } public class ShowOff implements CallShow { public void Show( ) { .... } public class ShowOff2 implements CallShow { public void Show( ) { .... } public class UseShow { CallShow savecallthis; UseShow( CallShow withthis ) { savecallthis = withthis; } void ReadyToShow( ) { savecallthis.
Then why are array and pointer declarations interchangeable as function formal parameters?
Infrequently Asked Questions in comp.lang.cClassism. We consider arrays ''second class objects''. They don't vote, and they get treated as pointers. Additionally, they're merely objects, not citizens. Marx wrote about this a lot. [a]
Sect. 18) What are the naming conventions?
Java Programmer's FAQ - Part DPackage names are guaranteed uniqueness by using the Internet domain name in reverse order: com.javasoft.jag - the "com" or "edu" (etc.) part used to be in upper case, but now lower case is the recommendation. Class and interface names are descriptive nouns, with the first letter of each word capitalized: PolarCoords. Interfaces are often called "something-able", e.g. "Observable", "Runnable", "Sortable".
Sect. 18) How can I set a system property?
Java Programmer's FAQ - Part DJDK 1.2 has System.setProperty( "property", "new value" ); Until then, you can get all the properties, and set just the one you want with code like this: System.getProperties().put("property", "new value" );
Can I convert a pointer-to-function to a void*?
Pointers to member functions, C++ FAQ LitePlease do not email me if the above seems to work on your particular version of your particular compiler on your particular operating system. I don't care. It's illegal, period.
Sect. 18) How do I convert a String to an int?
Java Programmer's FAQ - Part DThere are several ways. The most straightforward is: String myString = numString.trim(); int i = Integer.parseInt(myString); long l = Long.parseLong(myString) or String myString = numString.trim(); i = Integer.parseInt(myString,myIntRadix); Note 1: There is a gotcha with parseInt - it will throw a NumberFormatException for String values in the range "80000000" to "ffffffff". You might expect it to interpret them as negative, but it does not. The values have to be "-80000000" .
Sect. 18) How do I convert an int to a string?
Java Programmer's FAQ - Part DTry any of these: String s = String.valueOf(i); or String s = Integer.toString(i); or String s = Integer.toString(i, radix); or // briefer but may result in extra object allocation. String s = "" + i; Note: There are similar classes for Double, Float, Long, etc.
Sect. 18) How do I execute a command in my program?
Java Programmer's FAQ - Part DUse Runtime.getRuntime().exec( myCommandString ) where myCommandString is something like "/full/pathname/command". An applet will need to be signed in order to allow this. If the pathname contains spaces, e.g. "c:\program files\windows\notepad", then enclose it in quotes within the quoted string. Or pre-tokenize them into elements of an array and call exec(String[] cmd) instead of exec(String cmd). From JDK1.3 there are two new overloaded Runtime.exec() methods.
Sect. 18) How do I manipulate bits in Java?
Java Programmer's FAQ - Part DUse bytes, shorts, chars, ints or longs if you need to manipulate no more than 64 bits at once. Use ~ for NOT, & for AND, | for OR, and ^ for XOR. Beware that the precedence for & | and ^ is not intuitive; they have lower precedence than == and !=, so you must write: if ((a & 1) == 1) rather than: if (a & 1 == 1) You can also shift bits with the <<, >> and >>> operators; >> is a signed shift and >>> is an unsigned shift.
Sect. 18) How can I clone using serialization?
Java Programmer's FAQ - Part DLook at the code below, submitted by expert programmer John Dumas. It uses serialization to write an object into a byte array, and reads it back to reconstitute a fresh copy. This is a clever hack! import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.io.ObjectOutputStream; import java.io.
Can I convert a pointer-to-member-function to a void*?
Pointers to member functions, C++ FAQ LitePlease do not email me if the above seems to work on your particular version of your particular compiler on your particular operating system. I don't care. It's illegal, period.
What is the Argument From Design /the Watchmaker Argument?
Frequently Asked QuestionsNope. We don't think that the world is an empty, meaningless place, even though we don't think a god designed it. We think the world is a fascinating, wonderful, interesting place, and we enjoy living in it. Now, you may think that it's impossible to "really" enjoy this world without believing of God as the designer. We don't feel that way.
How do I send control characters or function keys?
Expect FAQ (Frequently Asked Questions)Sending control characters is easy: just write a send command and enter the control character you want to send. I like to enter most control characters literally - since the resulting script is more readable. However, your editor has to allow this. For example, suppose you want to send a Control-A. Conventionally, most editors display this as ^A, but you can't just enter ^ and A. (This will just send those two characters.
Sect. 18) Why can't I get String mutator methods to work?
Java Programmer's FAQ - Part DCode like this seems to show that the calls don't work! String s = " hello "; s.trim(); s.toUpperCase(); Note again that Strings are immutable. This means that once a String has been initialized, its contents won't change. In the code above, the method calls return a different String with the desired alterations. But this new String is not assigned to anything, so the results are discarded. To see the changes, assign the results of the method call to the original String or to another String.
Sect. 18) How do I print the hex value of an int?
Java Programmer's FAQ - Part DYou can print the hex equivalent of an int with: int i = 0xf1; System.out.println("i is hex " + Integer.toHexString(i) );
Sect. 18) How do I do I/O redirection using exec()?
Java Programmer's FAQ - Part DThis solution works on Unix platforms using either JDK 1.0.2, or JDK 1.1. The trick is to use an array of Strings for the command line: String[] command = {"/bin/sh", "-c", "/bin/ls > out.dat"}; If you don't do this, and simply use a single string, the shell will see the -c and /bin/ls and ignore everything else after that. It only expects a single argument after the -c. import java.io.*; import java.util.
Sect. 18) So why can't I exec common DOS commands this way (as in 18.8)?
Java Programmer's FAQ - Part DThe reason is that many of the DOS commands are not individual programs, but merely "functions" of command.com. There is no DIR.EXE or COPY.EXE for example. Instead, one executes the command processor (shell) explicitly with a request to perform the built-in command, like so: Runtime.getRuntime().exec("command.com /c dir") for example. On NT, the command interpreter is "cmd.exe", so the statement would be Runtime.getRuntime().
Sect. 18) OK, how do I read the output of a command?
Java Programmer's FAQ - Part Dabove (18.8, 18.9), adjusted like this: BufferedReader pOut= new BufferedReader( new InputStreamReader(p.getInputStream())); try { String s = pOut.readLine(); while (s != null) { System.out.println(s); s = pOut.readLine(); } } catch (IOException e) { } Another possibility is to read chunks of whatever length as they come in: ... p = r.exec(cmd); InputStream is = p.getInputStream(); int len; byte buf[] = new byte[1000]; try { while( (len = is.
Sect. 18) What is the point of creating the temporary reference to this.layoutMgr?
Java Programmer's FAQ - Part DThis code is from the 1.0 AWT, and the programmer was probably pretty skilled. public synchronized void layout() { LayoutManager layoutMgr = this.layoutMgr; if (layoutMgr != null) { layoutMgr.layoutContainer(this); } } The code makes a local copy of a global variable for one or both of two reasons. The first reason is that accessing local variables can be faster than accessing (non final) member variables. It's good for loops or where there are many references in the source.
