ورود

View Full Version : سوال در مورد استفاده از FilenameFilter



Sina.iRoid
شنبه 19 مهر 1393, 09:34 صبح
سلام دوستان. ممنون میشم اگر راهنماییم کنید.

من یه کلاسی دارم به نام: OnlyExt که این کلاس و در زیر مشاهده می کنید:


import java.io.File;
import java.io.FilenameFilter;


public class OnlyExt implements FilenameFilter{

String ext;

public OnlyExt(String ext) {
this.ext = "." + ext;
}

@Override
public boolean accept(File f1, String name) {
return name.endsWith(ext);
}
}


و این هم کد کلاس اصلیم هست.


import java.io.File;
import java.io.FilenameFilter;


public class DriverClass{


public static void main(String[] args) {

String dirname = "F://06.Wallp";
File f1 = new File(dirname);
FilenameFilter only = new OnlyExt("html");

String[] str = f1.list(only);

if (str == null) {
return;
}

for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
}


من در مورد این کد که در کلاس اصلی هست متوجه نمیشم:

FilenameFilter only = new OnlyExt("html");

سوال من اینه که مگه FilenameFilter یک اینترفیس نیست!؟ پس چطور از روی اینترفیس یه شی تعریف کرده؟ اصلا متوجش نمیشم. ممنون میشم اگر توضیح بدین.

parvizwpf
شنبه 19 مهر 1393, 10:16 صبح
نه شما کلاس onlyExt رو ساختید دیگه این اینترفیس نیست. اینکه چیزی از جنس onlyExt داره بعنوان کلاس به نوع filenamefilter انتساب میشه.
در ضمن اینم یه راهنما:
http://stackoverflow.com/questions/4587392/can-we-create-an-instance-of-an-interface-in-java

Sina.iRoid
یک شنبه 20 مهر 1393, 10:14 صبح
سلام.
ممنون از توضیحتون.
فقط یه سوال دیگه دارم. چرا برای ساختن آبجکت از روی کلاس OnlyExt، آبجکت و از اینترفیس FilenameFilter تعریف کرده؟ من یه تغییری در برنامه ایجاد کردم و مشکلی پیش نیومد.

OnlyExt ob = new OnlyExt("html");

parvizwpf
یک شنبه 20 مهر 1393, 10:21 صبح
خب بنظرم چون خود این کلاسم دیگه مشتقی از خود اون filenameFiletr شده دیگه. امیدوارم صحیح گفته باشم.

محمد فدوی
یک شنبه 20 مهر 1393, 19:17 عصر
زیاد تفاوتی نداره. شما می‌تونی برای تعریف همیشه از انواع داده‌ای والد یا حتی واسط‌های پیاده سازی شده توسط اون کلاس‌ها استفاده کنی.
مثلا کلاس String، خودش فرزند کلاس Object هست و در عین حال واسط‌های Serializable، Compareable و CharSequece رو پیاده سازی کرده. حالا من برای تعریف یه String میتونم به همه‌ی این روشا عمل کنم:


String string = "String";
Compareable<String> compareableOfString = "Compareable of String";
Compareable compareable = "Compareable";
Serilizable serializable = "Serializable";
CharSequence charseq = "CharSequence";
Object object = "Object";

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

Sina.iRoid
یک شنبه 20 مهر 1393, 22:18 عصر
سلام. ممنون از دوستان. متوجه شدم. فقط یه سوال دیگه که دوست عزیزمون (MohamadF (http://barnamenevis.org/member.php?145812-MohamadF)) در مثالش دیدم.

من برای تعریف یک لیست از JList استفاده می کنم. اما وقتی دکمه های ctrl + space و میزنم، اکلیپس همچین کدی و می نویسه:
JList<E>
می خواستم بدونم که بین دو علامت <> دقیقا چی باید بنویسم. ممنون از لطفتون.

parvizwpf
یک شنبه 20 مهر 1393, 23:53 عصر
اون E در واقع ، نوعی بجاش قرار میگیره که شما میخواهید.
یعنی میخوام از این نوع، کنترلم لیست بسازه.
http://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html
در مورد E نوشته:
E - the type of the elements of this list

محمد فدوی
دوشنبه 21 مهر 1393, 01:50 صبح
می خواستم بدونم که بین دو علامت <> دقیقا چی باید بنویسم
به کلاس، واسط یا متدهایی با این خصوصیت یه کلاس، واسط یا متد Generic (ژنریک = عمومی، کلی) میگن. به اون چیزی هم که بین <> مینویسی نوع ژنریک میگن... تو اینترنت مطلب در موردش زیاده.
تو این فروم هم قبلا تو این تاپیک (http://barnamenevis.org/showthread.php?470351-T-چیست؟&highlight=Generic+ژنریک+عمومی) در موردش حرف زدیم.

* اولا سعی کن قبل از پرسش حتما جستجو کنی. Google یکی از بهترین دوستاته! بعدشم سعی کن تو یه تاپیک یه سوال بپرسی یا حداقل همه‌ی سوالاتت رو تو همون پست اول بپرسی. اینجوری خیلی بهتره.