PDA

View Full Version : استفاده کلید واژه this هنگام ایجاد اینتنت برای چیه؟



ho1377
چهارشنبه 04 مرداد 1396, 13:34 عصر
سلام کد زیر رو در نظر بگیرید:

;(Intent i = new Intent(FirstActivity.this,SecondActivity.class

اومدن واژه this به دنبال FirstActivity برا چیه و چه منظوری داره؟ اگه یه جواب خوب بهم بدین ممنون میشم

Nevercom
چهارشنبه 04 مرداد 1396, 16:23 عصر
کلمه کلیدی this به Instance (عبارت Instance رو دسترسی ترجمه می کنن، و معنیش این هست که شئ‌ی که از کلاس ساخته میشه، یک نمونه از کلاس هست) کلاس اشاره می کنه
این سینتکس وقتی کاربرد داره که شما در کلاس داخلی بخواید به Instance کلاس خارجی دسترسی پیدا کنید.

این کد رو در نظر بگیرید:


public class OuterClass extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(OuterClass.this, TargetClass.class));
}
});

}
}

در متد onClick کلمه‌ی کلیدی this به درونی ترین کلاس اشاره می کنه که View.OnClickListener هست و بهش Anonymous Inner Class میگن، کلاس Intent در این Constructorش نیاز داره که پارامتر اول یک Instance از کلاسی براش ارسال بشه که نهایتاً از Context ارث بری کرده باشه (کلاس Activity در سلسله مراتب وراثتش از Context ارث بری می کنه). در این مثال کلاس OuterClass این خصوصیت رو داره و سینتکس جاوا برای اشاره به Instance کلاس بیرونی به این شکل هست: OuterClass.this اما کلاس OnClickListener این خصوصیت رو نداره و به همین دلیل نمیشه تنها از this استفاده کرد.

اگر همون کدی که نوشتید رو در هریک از متدهای کلاس OuerClass (یا در مثال شما FirstActivity) بنویسید، تنها کلمه‌ی کلیدی this کفایت می کنه، اما اگر در کلاس درونی بخواید این کد رو اجرا کنید (مثل مثالی که من نوشتم)، باید از این سینتکس تبعیت کنید

ho1377
پنج شنبه 05 مرداد 1396, 10:59 صبح
خیلی ممنون

nix099
یک شنبه 08 بهمن 1396, 12:36 عصر
سلام دوستان لطفا اگه کسی میدونه چجوری این مشگل برطرف میشه کمک کنه

public class Subclass extends Superclass
چرا تو محیط اکلیپس subclass همش علامت خطا داره؟؟؟؟؟؟