PDA

View Full Version : تغییر نوع



yegane8
یک شنبه 24 اردیبهشت 1391, 11:59 صبح
سلام
private HashMap<String, Room> exits;
Set<String> keySet = exits.keySet();
من تویه یه برنامه دیدم که بدون new کردن کلاس set خط بالا نوشته شده بود از کسی پرسیدم گفت چون keySet از نوع کلاس Set خودش new میکنه ولی نفهمیدم چرا لطفا توضیح بدین

spiderman200700
یک شنبه 24 اردیبهشت 1391, 12:24 عصر
من بعید میدونم این کدی که شما گذاشتی کار کنه. این کد حتما استثنای NullPointerExeption میده.

yegane8
یک شنبه 24 اردیبهشت 1391, 20:14 عصر
من همه ی کد رو نذاشتم ولی کلاس hashMap رو به اسم exit ,new میکنیم ولی کاس Set رو نه چرا؟؟؟

spiderman200700
یک شنبه 24 اردیبهشت 1391, 20:39 عصر
ببینید، Set<String> keySet یه متغییر از نوع Set<String> ایجاد میکنه . این متغییر کارش اینه که ، "آدرس" یه قسمت از حافظه رو که مربوط به یه شی از نوع کلاس Set<String> هست رو نگه داری کنه. پس keySet یه آدرس رو تو خودش نگه میداره.
حالا این شی ممکنه هر جایی ساخته بشه. فقط کافیه که آدرس اون شی توی keySet قرار بگیره تا بشه از امکانات این شی استفاده کرد.
حالا توی این کد
Set<String> keySet = exits.keySet();
متد keySet میاد یه شی از نوع Set<String> میسازه و اونو برمیگردونه (در اصل آدرس اون شی رو برمیگردونه) و توی متغییر keySet قرار میده. حالا keySet هم به اون شی اشاره می کنه و انگار خودتون با دستور new یه شی ساختین. یعنی keySet دیگه null نیست.
امیدوارم فهمیده باشید.

yegane8
یک شنبه 24 اردیبهشت 1391, 23:25 عصر
من یه چیزی رو نفهمیدم اوونم اینکه چه طوری میشه متد keySet از کلاس HashMap بیاد یه شی از نوع Set<String> بسازه؟

spiderman200700
یک شنبه 24 اردیبهشت 1391, 23:52 عصر
Set هم یه شی هس. مثل String یا مثل HashMap و نوع خروجیه یه متد میتونه از نوع Set باشه.
به این مثال توجه کنید:
public class Main {

public static void main(String args[]) {
CreateObject cb = new CreateObject();
String string = cb.createString();
HashMap<String, Object> hashmap = cb.createHashMap();
}
}

class CreateObject {

public String createString() {
String str = new String();
return str;
}

public HashMap<String, Object> createHashMap() {
HashMap<String, Object> hashmap = new HashMap<String, Object>();
return hashmap;
}
}


همونطور که میبینید دو متد کلاس CreateObject دو کلاس مختلف رو میسازه و برمی گردونه.
و در اینجا CreateObject cb = new CreateObject();
String string = cb.createString();
HashMap<String, Object> hashmap = cb.createHashMap();
ما بدون استفاده از دستور new ، یه شی از نوع String و یه شی از نوع HashMap ساختیم.
امیدوارم روشن شده باشه.