C, PHP, VB, .NET

Дневникът на Филип Петров


* Локални класове в Java

Публикувано на 14 октомври 2009 в раздел ПИК3 Java.

„Локални“ класове са тези класове, които са дефинирани вътре в програмен блок. Досега знаем как да влагаме класове като членове на даден клас. Когато говорим за локални класове се има предвид клас, който е създаден в тялото на метод.

Първото и може би най-важно нещо, което трябва да знаем за локалните класове е, че те са валидни само и единствено в програмния блок, в който са дефинирани. Можете веднага да си направите аналогия с „локални променливи“.

Ето един пример за локален клас, вложен в метод на клас „потребители“:

public class myfirstprogram{
  public static void main(String[] args){
    User ivan = new User("ivan", 8);
    System.out.println(ivan.getUser()+" has pass "+ivan.getPass());
  }
}

class User{
  private String username;
  private String password;
  private int id;
  private static int userscount = 0;
  public User(String username, int len){
    System.out.println("\nNew user entering...");
    this.username = username;
    this.setId();
    this.setPass(len);
  }
  private void setId(){
    userscount++;
    this.id = userscount;
  }
  private void setPass(int len){
    // Дефинираме локален клас "генератор на пароли"
    class PassGenerator{
      StringBuffer strb;
      public PassGenerator(int len){
        strb = new StringBuffer(len);
        for (int i=0; i<len; i++){
          switch((int)Math.round(Math.random()*2)){
            case 0:
              this.strb.append((char)((int)'0' + (int)(Math.round(Math.random()*9))));
              break;
            case 1:
              this.strb.append((char)((int)'a' + (int)(Math.round(Math.random()*25))));
              break;
            case 2:
              this.strb.append((char)((int)'A' + (int)(Math.round(Math.random()*25))));
              break;
          }
        }
      }
      public String getpass(){
        return strb.toString();
      }
    }
    // Правим локална инстанция на този локален клас
    PassGenerator p = new PassGenerator(len);
    this.password = p.getpass();
  }
  protected String getPass(){
    return this.password;
  }
  public int getId(){
    return this.id;
  }
  public String getUser(){
    return this.username;
  }
  public static void usersOnline(){
    System.out.println("Users online: "+userscount);
  }
}

Не можем да правим инстанция на клас „PassGenerator“ никъде другаде освен вътре в метод „setPass“, където този локален клас е деклариран. По този начин казваме, че „PassGenerator е локален клас за метод setPass“.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*