Another example of adoYourThing ( ) method comes from classes Friend and Stranger, which appeared earlier in this chapter in the code signing example and are shown again here to refresh your memory:
/ / On CD-ROM in file / / security/ex2/com / artima / security / friend / Friend.javapackage com.artima.security.friend; import com.artima.security.doer.Doer; import java.security.AccessController; import java.security.PrivilegedAction; public class Friend implements Doer (private Doer next; private boolean direct; public Friend (Doer next, boolean direct) (this.next = next; this.direct = direct;) public void doYourThing () (if (direct) (next.doYourThing ();) else (AccessController . doPrivileged (new PrivilegedAction () (public Object run () (next.doYourThing (); return null ;}});}}}// On CD-ROM in file / / security/ex2/com/artima/security / stranger / Stranger.javapackage com.artima.security.stranger; import com.artima.security.doer.Doer; import java.security.AccessController; import java.security.PrivilegedAction; public class Stranger implements Doer (private Doer next; private boolean direct; public Stranger (Doer next, boolean direct) (this.next = next; this.direct = direct;) public void doYourThing () (if (direct) (next.doYourThing ();) else (AccessController.doPrivileged (new PrivilegedAction () (public Object run () (next.doYourThing (); return null ;}});}}} Friendand Stranger have much in common.They have identical instance variables, constructors, and doYourThing () methods.They differ only in their package and simple names.When you create anew Friend or Stranger object, you must pass to the constructor aboolean value and areference to another object whose class implements the Doer interface.The constructor stores the passed Doer reference in the instance variable, next, and the boolean value in the instance variable, direct.When doYourThing () is invoked on either aFriend or Stranger object, the method invokes doYourThing (), either directly or indirectly, on the Doer reference contained in next.If direct is true, Friend or Stranger's doYourThing () just invokes doYourThing () directly on next.Otherwise, Friend or Stranger's doYourThing () invokes doYourThing () on next indirectly, by way of adoPrivileged () call.
/ / On CD-ROM in file / / security/ex2/com/artima/security/friend/Friend.javapackage com.artima.security.friend; import com.artima.security.doer.Doer; import java.security.AccessController; import java.security.PrivilegedAction; public class Friend implements Doer (private Doer next; private boolean direct; public Friend (Doer next, boolean direct) (this.next = next; this.direct = direct;) public void doYourThing () (if (direct) (next. doYourThing ();) else (AccessController.doPrivileged (new PrivilegedAction () (public Object run () (next.doYourThing (); return null ;}});}}}// On CD-ROM in file / / security / ex2/com/artima/security/stranger/Stranger.javapackage com.artima.security.stranger; import com.artima.security.doer.Doer; import java.security.AccessController; import java.security.PrivilegedAction; public class Stranger implements Doer (private Doer next; private boolean direct; public Stranger (Doer next, boolean direct) (this.next = next; this.direct = direct;) public void doYourThing () (if (direct) (next.doYourThing (); ) else (AccessController.doPrivileged (new PrivilegedAction () (public Object run () (next.doYourThing (); return null ;}});}}} Friendand Stranger have much in common.They have identical instance variables, constructors, and doYourThing () methods.They differ only in their package and simple names.When you create anew Friend or Stranger object, you must pass to the constructor aboolean value and areference to another object whose class implements the Doer interface.The constructor stores the passed Doer reference in the instance variable, next, and the boolean value in the instance variable, direct.When doYourThing () is invoked on either aFriend or Stranger object, the method invokes doYourThing (), either directly or indirectly, on the Doer reference contained in next.If direct is true, Friend or Stranger's doYourThing () just invokes doYourThing () directly on next.Otherwise, Friend or Stranger's doYourThing () invokes doYourThing () on next indirectly, by way of adoPrivileged () call.
Another example of adoYourThing () method comes from classes Friend and Stranger, which appeared earlier in this chapter in the code signing example and are shown again here to refresh your memory:
inside java virtual machine notes (7) 2009-10-08 13:00 / / On CD-ROM in file security/ex2/TextFileDisplayer.javaimport com.artima.security.doer.Doer; import java.io. FileReader; import java.io.CharArrayWriter; import java.io.IOException; public class TextFileDisplayer implements Doer (private String fileName; public TextFileDisplayer (String fileName) (this.fileName = fileName;) public void doYourThing () (try (FileReader fr = new FileReader (fileName); try (CharArrayWriter caw = new CharArrayWriter (); int c; while ((c = fr.read ())!=- 1) (caw.write (c);) System.out.println (caw.toString ());} catch (IOException e) () finally (try (fr.close ();) catch (IOException e ){}}} catch (IOException e ){}}} When you create aTextFileDisplayer object , you must pass afile path name to its constructor.The TextFileDisplayer constructor stores the passed path name in the filename instance variable.When you invoke doYourThing () on the TextFileDisplayer object, it will attempt to open and read the contents of the file and print them at the standard output.
评论