zoukankan      html  css  js  c++  java
  • Java内部类(3):局部内部类

    有这样一种内部类,它是嵌套在方法和作用域内的对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

    匿名内部类,任意作用域中嵌入的内部类都属于局部内部类的范畴。

    <局部内部类>

     1 interface Destination {
     2     String readLabel();
     3 }
     4 
     5 class Test003Sub {
     6 
     7     public Destination destination(String s) {
     8         class Test003Inner1 implements Destination {
     9             private String s;
    10 
    11             private Test003Inner1(String s) {
    12                 this.s = s;
    13             }
    14 
    15             @Override
    16             public String readLabel() {
    17                 return s;
    18             }
    19         }
    20         return new Test003Inner1(s);
    21     }
    22 }
    23 
    24 public class Test003 {
    25     public static void main(String[] args) {
    26         Test003Sub test003 = new Test003Sub();
    27         System.out.println(test003.destination("Hello World").readLabel());// Hello World
    28     }
    29 }

    <匿名内部类>

    上例也可以改成匿名内部类。在匿名类内部使用的参数推荐加final。

     1 interface Destination {
     2     String readLabel();
     3 }
     4 
     5 class Test003Sub {
     6     public Destination destination(final String s) {
     7         return new Destination() {
     8             private String sin = s;
     9 
    10             @Override
    11             public String readLabel() {
    12                 return sin;
    13             }
    14         };
    15     }
    16 }
    17 
    18 public class Test003 {
    19     public static void main(String[] args) {
    20         Test003Sub test003 = new Test003Sub();
    21         System.out.println(test003.destination("Hello World").readLabel());// Hello World
    22     }
    23 }

    <任意作用域中嵌入的内部类>

    内部类还可以嵌入到方法的任意作用域中。代码中内部类嵌入if内,并不是说该类创建是有条件的,它与其他类一样是一起编译过的

     1 class Test004Sub {
     2     String internalTracking(boolean b) {
     3         String s = "";
     4         if (b) {
     5             class TrackingSlip {
     6                 private String s;
     7 
     8                 private TrackingSlip(String s) {
     9                     this.s = s;
    10                 }
    11 
    12                 String getSlip() {
    13                     return s;
    14                 }
    15             }
    16             TrackingSlip ts = new TrackingSlip("Hello World!");
    17             s = ts.getSlip();
    18         } else {
    19             s = "No Data!";
    20         }
    21         return s;
    22     }
    23 }
    24 
    25 public class Test004 {
    26     public static void main(String[] args) {
    27         Test004Sub test004 = new Test004Sub();
    28         System.out.println(test004.internalTracking(true)); // Hello World!
    29         System.out.println(test004.internalTracking(false)); // No Data!
    30     }
    31 }
  • 相关阅读:
    Percona Toolkit安装、使用
    Mysql 5.6主从搭建
    AngularJs 抓狂系列索引
    AngularJs 抓狂之: $q promise 自动unwarp功能被禁用了
    AngularJs 的 好文章
    AngularJs 抓狂之:Angular的元素是驼峰命名法,但是HTML属性是用-分隔的,两者不一致!
    Ajax请求永远是304的解决方案
    Java 7 Pocket Guide 读书笔记
    MFC中获取App,MainFrame,Doc和View类等指针的方法
    Thrift实践:(一)安装 -- 未完待续
  • 原文地址:https://www.cnblogs.com/storml/p/8317963.html
Copyright © 2011-2022 走看看