خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه ایجاد و استفاده از یک کلاس عمومی در جاوا

کلاس های عمومی قابلیت استفاده مجدد را تسهیل می کند. کد خود را با استفاده از کلاس های عمومی در جاوا مقیاس پذیر و کارآمد کنید.

Generics یک مفهوم برنامه نویسی است که به شما امکان می دهد نوع مورد نظر خود را در یک مجموعه مشخص کنید. یک نوع عمومی می تواند هر مقدار غیر ابتدایی باشد. پارامترهای نوع سنتی که ممکن است با آنها آشنا باشید رشته و عدد صحیح هستند.

با این حال، شما می توانید یک نوع عمومی منحصر به فرد ایجاد کنید. علاوه بر این، می توانید یک کلاس عمومی ایجاد کنید و از آن برای ایجاد مجموعه های مختلف با استفاده از ژنریک استفاده کنید.

ایجاد یک نوع عمومی

یک نوع عمومی اساساً یک شی است که با استفاده از یک کلاس یا یک رابط ایجاد می شود. بنابراین، برای این مقاله، نوع عمومی مشتری خواهد بود. با استفاده از یک نمونه برنامه کاربردی در سطح سازمانی، مشتری یک موجودیت در یک سیستم پایگاه داده را نشان می دهد. این سیستم پایگاه داده به یک شرکت مبلمان که دارای سه مکان فیزیکی در سه شهر مختلف است خدمات می دهد.

public abstract class Customer {
  private String name;
  public Customer(String name) {
    this.name = name;
  }
  public String getName() {
    return name;
  }
}

کلمه کلیدی انتزاعی را در اعلان کلاس مشتری در بالا مشاهده خواهید کرد. این بدان معنی است که شما نمی توانید یک نوع یا شی مستقیم از نوع مشتری ایجاد کنید.

با توجه به اینکه هر مکان فروشگاه فیزیکی یک لیست منحصر به فرد از مشتریان خواهد داشت، برنامه باید دارای سه زیر کلاس مشتری باشد که شما با استفاده از مفهوم برنامه نویسی ارثی پیاده سازی خواهید کرد.

مطلب مرتبط:   4 بهترین کتابخانه مؤلفه بدون سبک برای ساخت برنامه‌های React قابل سفارشی‌سازی

این سه زیر کلاس انواع جامد به نوع مشتری عمومی خواهند بود. اولین زیر کلاس مشتری حاوی کد زیر است:

public class City1Customer extends Customer{
  public City1Customer(String name) {
    super(name);
  }
}

ایجاد یک کلاس عمومی

برای استفاده از یک نوع عمومی، باید یک کلاس یا روش عمومی داشته باشید که این نوع را به عنوان پارامتر بپذیرد. برای ایجاد یک کلاس عمومی، فقط باید پارامتر type را در اعلان کلاس وارد کنید.

public class Promotion<T> {}

کد بالا نشان می دهد که کلاس Promotion عمومی است. این بدان معناست که کلاس Promotion از انواع برای ایجاد اشیاء خود استفاده می کند. اکنون اعلان کلاس می تواند مجموعه ای از اشیاء را بگیرد که رشته ها، اعداد صحیح، مشتریان و غیره هستند. با این حال، شرکت مبلمان فقط از کلاس Promotion می خواهد که اشیاء را با استفاده از انواع Customer ایجاد کند.

public class Promotion<T extends Customer> {}

کد به روز شده در بالا تضمین می کند که کلاس Promotion فقط انواع Customer را می گیرد، این به معنای همه زیر کلاس های کلاس مشتری است.

با توجه به اینکه سه فروشگاه وجود دارد، این شرکت می خواهد برای هر فروشگاه یک تبلیغ مستقل ایجاد کند. داده های مورد نیاز برای این تبلیغات مشابه است. هر تبلیغ یک نام و مجموعه ای از مشتریانی دارد که در آن تبلیغات برنده شدند.

راه های مختلفی برای برخورد با این مشکل وجود دارد. می توانید یک کلاس والد Promotion ایجاد کنید و برای هر مکان فروشگاه سه زیر کلاس داشته باشید. اما از آنجایی که هر تبلیغات ساختار مشابهی دارد، در نهایت کد تکراری می نویسید که ناکارآمد است (مخصوصاً از آنجایی که قبلاً با زیر کلاس های مشتری کار می کنید).

مطلب مرتبط:   نحوه جلوگیری از اسکریپت بین سایتی در Node.js

بنابراین، کلاس عمومی Promotion یکی از راه حل های کارآمدتر برای این مشکل است.

import java.util.ArrayList;

public class Promotion<T extends Customer> {

  private String promoName;
  private ArrayList<T> winners = new ArrayList<>();

  public Promotion(String promoName) {
    this.promoName = promoName;
  }

  public String getPromoName() {
    return promoName;
  }

  public void addCustomer(T customer) {
    if (winners.contains(customer)) {
      System.out.println( customer.getName() + " is already a winner of this prize.");
    } else {
      winners.add(customer);
      System.out.println( customer.getName() + " is a winner in the " + this.promoName);
    }
  }

  public int numWinners() {
    return this.winners.size();
  }
}

کلاس عمومی Promotion دارای یک متغیر است (promoName). این کلاس جاوا مجموعه ای از مشتریانی را می پذیرد که برنده تبلیغ شدند (برندگان) و آنها را در یک ساختار داده ArrayList ذخیره می کند. برای افزودن یک مشتری جدید به یک مجموعه تبلیغاتی خاص، باید از متد addCustomer() استفاده کنید. اگر در هر نقطه ای بخواهید تعداد مشتریانی که در یک مجموعه هستند را بدانید، می توانید متد numWinners() را فراخوانی کنید.

ایجاد مجموعه با استفاده از یک کلاس عمومی

قبل از اینکه بتوانید مجموعه ایجاد کنید، باید مشتری ایجاد کنید.

public class Main {
  public static void main(String[] args) {
    City1Customer john = new City1Customer("John Brown");
    City1Customer kelly = new City1Customer("Kelly James");
    City2Customer jane = new City2Customer("Jane Doe");
    City3Customer jess = new City3Customer("Jess Smith");
  }
}

کلاس Main در بالا چهار شی مشتری ایجاد می کند که هر کدام به یکی از سه مکان فروشگاه تعلق دارند. برای شروع ایجاد مجموعه ها، ابتدا باید اشیاء تبلیغاتی (یکی برای هر مکان فروشگاه) ایجاد کنید.

Promotion<City1Customer> city1promo = new Promotion<City1Customer>("City1 Promo");
Promotion<City2Customer> city2promo = new Promotion<City2Customer>("City2 Promo");
Promotion<City3Customer> city3promo = new Promotion<City3Customer>("City3 Promo");

درج سه خط کد بالا در کلاس Main به طور موثر سه تبلیغ نوع خاص (یا مکان خاص) ایجاد می کند. بنابراین، فقط مشتریان فروشگاه در اولین مکان شهر (City1Customer) می توانند در تبلیغات آن شهر (city1promo) برنده باشند.

city1promo.addCustomer(john);
city1promo.addCustomer(kelly);

بنابراین، افزودن کد بالا به کلاس Main نتیجه زیر را در کنسول ایجاد می کند:

مطلب مرتبط:   نحوه نصب Java JDK در ویندوز 11

برندگان شهر یک

با این حال، اگر بخواهید یک مشتری سوم را به لیست برندگان تبلیغات در شهر اول اضافه کنید، IDE شما یک خطای کامپایل ایجاد می کند.

خطای تالیف

دلیلش این است که نه جین و نه جس مشتری فروشگاه شهر اول نیستند. ایجاد انواع و کلاس های عمومی مفید است، زیرا از کشف این خطاهای ساده و خراب کردن پایگاه داده سیستم جلوگیری می کند. در یک برنامه کوچک، تشخیص چنین خطاهایی آسان است، اما در یک سیستم در سطح سازمانی، خطاهایی مانند این ممکن است کشف نشوند.

city2promo.addCustomer(jane);

جایگزین کردن خط کد اشتباه با کد بالا، خروجی زیر را در کنسول چاپ می کند:

برنده سیتی دو

مزایای استفاده از انواع ژنریک

از برنامه نمونه در این مقاله، می توانید ببینید که مزیت اصلی استفاده از انواع عمومی، بررسی نوع کامپایل در زمان است. بدون بررسی نوع، افزودن جین به هر یک از سه لیست تبلیغاتی خطای زمان اجرا ایجاد نمی کند، زیرا جین در واقع مشتری شرکت مبلمان است.

Generics همچنین چندین مزیت دیگر از جمله قابلیت استفاده مجدد کد و مقیاس پذیری را تسهیل می کند. همانطور که شرکت به شهرهای جدید گسترش می یابد، می توانید به راحتی انواع شی تبلیغاتی جدید را با تکیه بر کد موجود ایجاد کنید. انواع عمومی همچنین به شما امکان ایجاد کد کارآمد را می دهد که در فرآیند توسعه نرم افزار اولویت اصلی است.