نقل قول: سوال در زمینه لیست ها
ای نماد بر میگرده به Generics و به معنی این هست که کلاس یا متد شما بر اساس انواع مختلفی کار کنه. بعنی نمی خوای از نوع از قبل مشخصی استفاده کنی مثل String, Object, ... و بر اساس هر نوعی که کاربر خواست تعیین کنه کلاس شما و متد شما چک های نوع رو انجام میده. امیدوارم رسونده باشم خیلی کوتاه. مثلن شما می تونی استخری از کانکشن های دیتابیس داشته باشی. استخری از اشیای دانشجو داشته باشی و ... اما کلاس استخر جدا از اینکه رو چه کلاسی کار کنه یه کلاس واحد و مشخص و یکتا هستش. و نمی شه گفت اون شی توی استخر رو باید از چه نوعی گرفت. پس از جنریکز استفاده میکنیم.
نقل قول:
چرا اومده تو کلاس
Pool
<
T
> یه interface بنام
PoolObjectFactory
<
T
> تعرف کرده ؟؟
می تونسته بیرونش هم تعریف کنه. اما از اونجایی که جای دیگه با این اینترفیس کاری نداشته و فقط میخواسته راهی برای استفاده کننده از استخر درست کنه که بتونه شی های توی استتخر رو به شکل معینی ایجاد کنه. واسه همین توی همون کلاس تعریفش کرده.
نقل قول:
مگه برای استفاده از interface نباید که اول یه کلاس تعریف کرد و اونو توش implement کرد ؟؟
پس چطور اینکارو نکرده اومده
factory.
createObject
(
)
; رو اجرا میکنه ؟؟
چرا! اون اومده یه شی فکتوری که بهش رسیده رو روش تابع createObject رو فراخوانی کرده. این مشتری کلاس استخر هست که باید اون تابع رو و اینترفیسش رو پیاده سازی کرده باشه تا بعدن این فراخوانی دچار مشکل نشه دیگه.
به این روش کاربرد میگن پلیمرفیزم!!!
نقل قول: سوال در زمینه لیست ها
سلام داداش دمت گرم.
میشه در مورد نحوه استفاده از این Pool<T> هم یه مثال عملی بزنی ؟؟
نقل قول: سوال در زمینه لیست ها
فرض کن یه کلاس به اسم توپ داری بعد یه سری توپ رو میخوای تو این استخر بریزی و از اشیاش استفاده کنی. برای اینکار باید اون اینترفیس فکتوری رو واسه توپت پیاده سازی کنی که توش شی توپ رو ایجاد می کنی.
بعد به استخر میگی newObject و یه توپ بهت میده... تمرینت رو باهاش می کنی وقتی کارت تموم شد میگی free و توپ رو میزاری توی سبد برای استفاده های بعدی...
یه چیزی تو این مایه ها...
public class PoolBallFactory<Ball> extends PoolObjectFactory<Ball> {
public Ball createObject() {
return new Ball();
}
}
Pool p = new Pool( new PoolBallFactory(), 100 );
Ball b = p.newObject();
// play with b
p.free( b );