<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>java &#8211; Mahdi Tajik</title>
	<atom:link href="http://www.mahditajik.ir/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mahditajik.ir</link>
	<description>I&#039;m Mahdi Tajik. I am project manager and Full-stack Android developer. welcome to my personal website.</description>
	<lastBuildDate>Thu, 29 Nov 2018 14:21:51 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.6</generator>

<image>
	<url>http://www.mahditajik.ir/wp-content/uploads/2015/03/cropped-sample-logo-MT-2-32x32.png</url>
	<title>java &#8211; Mahdi Tajik</title>
	<link>http://www.mahditajik.ir</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Java Annotation چیست؟</title>
		<link>http://www.mahditajik.ir/java-annotation-%da%86%db%8c%d8%b3%d8%aa%d8%9f/</link>
					<comments>http://www.mahditajik.ir/java-annotation-%da%86%db%8c%d8%b3%d8%aa%d8%9f/#respond</comments>
		
		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Mon, 01 Aug 2016 15:26:26 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[annotation]]></category>
		<category><![CDATA[IntDef]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[StringDef]]></category>
		<category><![CDATA[انوتیشن]]></category>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=1981</guid>

					<description><![CDATA[<p>, جاوا انوتیشن اطلاعات اضافی به کد ما اضافه می کند که بخشی از برنامه نیست ولی تاثیر در اجرای برنامه می گذارد. Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate. موضاعات ...</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/java-annotation-%da%86%db%8c%d8%b3%d8%aa%d8%9f/">Java Annotation چیست؟</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1990" src="http://www.mahditajik.ir/wp-content/uploads/2016/07/annotitaion.jpg" alt="annotitaion" width="800" height="486" srcset="http://www.mahditajik.ir/wp-content/uploads/2016/07/annotitaion.jpg 800w, http://www.mahditajik.ir/wp-content/uploads/2016/07/annotitaion-300x182.jpg 300w, http://www.mahditajik.ir/wp-content/uploads/2016/07/annotitaion-768x467.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>, جاوا انوتیشن اطلاعات اضافی به کد ما اضافه می کند که بخشی از برنامه نیست ولی تاثیر در اجرای برنامه می گذارد.</p>
<blockquote><p><a href="https://docs.oracle.com/javase/tutorial/java/annotations/" target="_blank" rel="noopener"><em>Annotations</em>, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate.</a></p></blockquote>
<p style="text-align: justify;">موضاعات مهمی که در انوتیشن مطرح است عبارتند از اطلاع رسانی به کامپایلر، انجام پردازش در زمان کامپایل و همچنین پردازش در زمان اجرا می باشد. انوتیشن ها توسط کامپایلر و یا ابزارهای تجزیه انوتیشن، تجزیه می شوند. قبل از این اطلاعات اضافی در javadoc قرار می گرفت، ولی توسط انوتیشن این اطلاعات را می توان در زمان کامپایل و حتی در زمان اجرا داشته باشیم. چند مثالی کاربردی خواهیم داشت و امیدوارم تا آخر این آموزش با من همراه باشید.</p>
<p style="text-align: justify;">انوتیشن های زیادی توسط خود زبان جاوا استفاده می شوند که شاید با خیلی از آنها همچون @Override آشنا باشید. علاوه بر انواع موجود می توان انوتیشن اختصاصی داشته باشیم که در مثال های بعدی با آنها مواجه خواهیم شد. توجه داشته باشید که انوتیشن می تواند ورودی داشته باشد یا اینکه نداشته باشد.</p>
<p style="text-align: justify;">چند نمونه:</p>
<p style="text-align: justify;"><b>@Override</b>  به کامپایلر می گوید که متد اظهار شده در کلاس اصلی را با دستوراتی ما بازنویسی کند.</p>
<p style="text-align: justify;"><b>@SuppressWarnings</b> می گوید که اخطارها را سرکوب کن. گرچه نمایش اخطار مفید است ممکن است در مواردی بخواهیم تا کامپایلر اخطاری را نمایش ندهد.</p>
<pre class="crayon-plain-tag">@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@SuppressWarnings("unused")
public void unusedmethod(){

    //some methods
}

@SuppressWarnings("deprecation")
public void oldmethdthatDepricated(){

    //some methods
}</pre>
<p style="text-align: justify;">بعضی انوتیشن ها هم برای توصیف انوتیشن های دیگر بکار می رود. یعنی انوتیشن برای انوتیشن:</p>
<p style="text-align: justify;"><b>@Retention</b> می گوید که انوتیشن موردنظر چگونه ذخیره شود. استفاده است مثلا <code>RetentionPolicy.SOURCE</code>  انوتیشن اشاره شده در سطح سورس کدمی ماند و توسط کامپایلر قابل دسترسی نباشد. اگر مقدار را  <code>RetentionPolicy.CLASS </code> بگذاریم باعث می شود که انوتیشن مان در زمان کامپایل در نظر گرفته شود و توسط JVM ایگنور شود و یا توسط <code>RetentionPolicy.RUNTIME</code> انوتیشنمان توسط JVM نگهداری شود و در زمان اجرا قابل استفاده است.</p>
<p style="text-align: justify;"><b>@Documented</b> می گوید که انوتیشن بکار رفته باید توسط ابزار سندسازی جاوا به سند تبدیل شوند.</p>
<p style="text-align: justify;"><b>@Target</b>  توسط این انوتیشن، دسترسی المنت های جاوا به انوتیشن ما را محدود می کند و انواع انتخاب شده می توانند به انوتیشن ما دسترسی داشته باشند.</p>
<p style="text-align: justify;"><b>@Inherited</b> توجه کنید که انوتیشن ها ارث بری ندارند. یعنی مثلا اگر یک کلاسی با یک انوتیشن خاصی درست کردید و یک کلاس دیگر از آن مشتق شد اگر از این انوتیشن استفاده نکرده باشید کلاس جدید انوتیشن های پدر را به ارث نمی برد. در مثالی که بعد از تعاریف می زنم تمام این مطالب را نمایش خواهم داد.</p>
<p style="text-align: justify;"><b>@Repeatable</b>  این امکان در جاوای ۸ اضافه شده که می توانیم چند انوتیشن یکسان ولی با مقادیر مختلف را به یک متد اضافه کنیم. مثلاً در مثال زیر دوبار انوتیشن آلارم را با دو role متفاوت اعمال کردیم.</p>
<pre class="crayon-plain-tag">@Alert(role="Manager")
@Alert(role="Administrator")
public class UnauthorizedAccessException extends SecurityException { ... }</pre>
<p style="text-align: justify;">حال که با برخی انوتیشن های پیش فرض آشنا شدیم می خواهیم نحوه ساخت انوتیشن را باهم برسی کنیم. انوتیشن بسیار شبیه به اینترفیس ساخته می شود با این تفاوت که از کاراکتر @ استفاده می کنیم.</p>
<pre class="crayon-plain-tag">package com.example.mtajik.annotationtest;


import java.lang.annotation.*;

@Inherited
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)

@interface BasicInformation {
    String corpId() default "mobiro";
    String corpAddress() default "kordestan .st";
}</pre>
<p style="text-align: justify;">انوتیشنی ساختیم که اطلاعات کلی کارمندان را نگهداری می کند. همانطور که ملاحظه می کنید انوتیشن می تواند متد داشته باشد. متد های آن می تواند مقدار پیش فرض داشته باشد. همچنین انوتیشن ما خودش چند انوتیشن دارد که در بالا تعریف کردیم. سپس کلاس کارمند با انوتیشن تولید شده را بصورت زیر می سازیم:</p>
<pre class="crayon-plain-tag">package com.example.mtajik.annotationtest;

@BasicInformation(corpId="Irancell", corpAddress="Vanak .ave")
public class Employee {
    String eId;
    String eName;
    public Employee(String eId, String eName){
        this.eId = eId;
        this.eName = eName;
    }

    public void getEmployeeDetails(){
        System.out.println("Employee ID: "+eId);
        System.out.println("Employee Name: "+eName);
    }
}</pre>
<p style="text-align: justify;">سپس کلاس زیر را بسازید و برنامه را اجرا کرده و نتیجه را در کنسول ببینید. همانطور که در اول اشاره کردم این کلاس همان ابزار تجزیه انوتیشن است که توسط reflection در هنگام Runtime انوتیشن های موجود در کلاس را گرفته و نتیجه را نمایش می دهد.</p>
<pre class="crayon-plain-tag">package com.example.mtajik.annotationtest;


import java.lang.annotation.Annotation;
public class TestCustomAnnotationBasicBenefits {
    public static void main(String[] args) throws Exception{
        Employee emp = new Employee("E-100", "user3320018");
        emp.getEmployeeDetails();
        Class reflectedClass = emp.getClass();

        Annotation informationAnn = reflectedClass.getAnnotation(BasicInformation.class);
        BasicInformation bBenefits = (BasicInformation)informationAnn;
        System.out.println("corporation ID: "+bBenefits.corpId());
        System.out.println("corporation address: "+bBenefits.corpAddress());
    }
}</pre>
<p style="text-align: justify;">ملاحظه کردید که چگونه می توان با استفاده از Annotation از Meta-data در هنگام Runtime دسترسی پیدا کرد و استفاده کرد.</p>
<p style="text-align: justify;">همچنین می توان با استفاده از انوتیشن نوع ورودی را برای یک تابع محدود کرد و با آن مانند enum برخورد کرد. هرچند به نظر شخصی بنده بسیار مفید تر از enum خواهد بود زیرا اطلاعاتی به همراه دارد که بسیار جای مانور دارد. به مثال زیر توجه کنید.</p>
<p style="text-align: justify;"><strong>IntDef</strong></p>
<p style="text-align: justify;">انوتیشنی است که توسط آن یک عنصر  integer را ارائه می دهد که در هنگام استفاده فقط می توانیم از مقادیر داده شده استفاده کنیم. ما یک انوتیشن داریم به عنوان روزهای هفته که انواع آن را از مقادیر static انتخاب کردیم. ( انواع آن روزهای هفته است)</p>
<pre class="crayon-plain-tag">static public final int SHANBE_ = 0;
static public final int YEK_SHANBE_ = 1;
static public final int DO_SHANBE = 2;
static public final int SE_SHANBE_ = 3;
static public final int CHAHR_SHANBE_ = 4;
static public final int PANJ_SHANBE_ = 5;
static public final int JOMHE_ = 6;</pre>
<pre class="crayon-plain-tag">@IntDef({SHANBE_, YEK_SHANBE_,DO_SHANBE,SE_SHANBE_,CHAHR_SHANBE_,PANJ_SHANBE_, JOMHE_})
@Retention(RetentionPolicy.SOURCE)
@Inherited
public @interface RozayeHafte {}</pre>
<p style="text-align: justify;">حال متدی برای محاسبه حقوق داریم که ورودی آن را از جنس این انوتیشن می گذاریم. حال هر جا که متد را صدا بزنید intellisense ide یعنی Android Studio به عوان ورودی پیش فرض همان روز ها را به ما پیشنهاد می دهد! جالب است نه؟ این همان کاری است که در هنگام انتخاب visibility در View خودش بطور پیش فرض GONE و Visible و Invisible را پیشنهاد می دهد و اگر سورس کد View را در SDK های زیر ۲۲ ببینید ملاحظه خواهید کرد که از همین روش برای مشخص کردن ورودی هایش استفاده کرده است.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-2022" src="http://www.mahditajik.ir/wp-content/uploads/2016/08/test.jpg" alt="test" width="782" height="622" srcset="http://www.mahditajik.ir/wp-content/uploads/2016/08/test.jpg 782w, http://www.mahditajik.ir/wp-content/uploads/2016/08/test-300x239.jpg 300w, http://www.mahditajik.ir/wp-content/uploads/2016/08/test-768x611.jpg 768w" sizes="(max-width: 782px) 100vw, 782px" /></p>
<p>&nbsp;</p>
<p>استفاده از <strong>StringDef</strong> هم بهمین صورت است با این تفاوت که انواع آن string هستند.</p>
<p>سورس کامل</p><pre class="crayon-plain-tag">public class MainActivity extends AppCompatActivity {
    
    static public final int SHANBE_ = 0;
    static public final int YEK_SHANBE_ = 1;
    static public final int DO_SHANBE = 2;
    static public final int SE_SHANBE_ = 3;
    static public final int CHAHR_SHANBE_ = 4;
    static public final int PANJ_SHANBE_ = 5;
    static public final int JOMHE_ = 6;

    static public final String GHAWY = "ghavi";
    static public final String ZAEEF = "zaeef";
    static public final String PIZORI = "pizoori";


    public void mohasebeheHoggogh(@RozayeHafte int day, @GhodratBadani String body) {

        switch (day) {
            case SHANBE_:
                Toast.makeText(MainActivity.this, body + " SHANBE_", Toast.LENGTH_SHORT).show();
                break;
            case YEK_SHANBE_:
                Toast.makeText(MainActivity.this, body + " YEK_SHANBE_", Toast.LENGTH_SHORT).show();
                break;
            case JOMHE_:
                Toast.makeText(MainActivity.this, body + " JOMHE_", Toast.LENGTH_SHORT).show();
                break;
        }

    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mohasebeheHoggogh(JOMHE_, GHAWY);
    }

    private enum RozhayeHafteType2 {
        SHANBE_,
        YEK_SHANBE_,
        JOMHE_

    }

    @IntDef({SHANBE_, YEK_SHANBE_, DO_SHANBE, SE_SHANBE_, CHAHR_SHANBE_, PANJ_SHANBE_, JOMHE_})
    @Retention(RetentionPolicy.SOURCE)
    @Inherited
    public @interface RozayeHafte {
    }


    @StringDef({GHAWY, ZAEEF, PIZORI})
    @Inherited
    @Retention(RetentionPolicy.SOURCE)
    public @interface GhodratBadani {
    }
}</pre><p>
منبع: <a href="http://www.biitecode.ir" target="_blank" rel="noopener">بایت کد</a></p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/java-annotation-%da%86%db%8c%d8%b3%d8%aa%d8%9f/">Java Annotation چیست؟</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://www.mahditajik.ir/java-annotation-%da%86%db%8c%d8%b3%d8%aa%d8%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lambda Expression چیست و چگونه در جاوا استفاده می شود</title>
		<link>http://www.mahditajik.ir/lambda-expression/</link>
					<comments>http://www.mahditajik.ir/lambda-expression/#comments</comments>
		
		<dc:creator><![CDATA[mahdi]]></dc:creator>
		<pubDate>Tue, 05 Jul 2016 09:58:43 +0000</pubDate>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[expression]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lambda]]></category>
		<category><![CDATA[جاوا]]></category>
		<category><![CDATA[لامبدا اکسپرشن]]></category>
		<guid isPermaLink="false">http://www.mahditajik.ir/?p=1948</guid>

					<description><![CDATA[<p>لامبدا اکسپرشن امکان مهم و جدیدی است که در جاوا ۸ اضافه شده است که قبلا در C# مطرح شده بود. توسط لامبدا می توانیم توابعی را بصورت بی نام به همراه بدنه آن تعریف کنیم که مزایای گوناگونی از قبیل مختصر کردن کد، کم کردن تعداد فایل های .java پروژه را داراست. همچنین در ...</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/lambda-expression/">Lambda Expression چیست و چگونه در جاوا استفاده می شود</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;"><img decoding="async" loading="lazy" class="aligncenter size-full wp-image-1959" src="http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression.jpg" alt="lambda expression" width="800" height="486" srcset="http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression.jpg 800w, http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression-300x182.jpg 300w, http://www.mahditajik.ir/wp-content/uploads/2016/07/lambda-expression-768x467.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p style="text-align: justify;">لامبدا اکسپرشن امکان مهم و جدیدی است که در جاوا ۸ اضافه شده است که قبلا در C# مطرح شده بود. توسط لامبدا می توانیم توابعی را بصورت بی نام به همراه بدنه آن تعریف کنیم که مزایای گوناگونی از قبیل مختصر کردن کد، کم کردن تعداد فایل های .java پروژه را داراست. همچنین در هنگامی که می خواهیم از تابعی بر اساس شرایط استفاده کنیم و قابل استفاده است و یا مثلا در شرایط خاصی که نیاز به کلاس مشخصی داریم. فرض کنید در Runtime  بر اساس رفتار کاربر قرار است توابع مختلفی ایجاد شود. همچنین می توان برای پاس دادن یک اینترفیس به یک تابع از لامبدا استفاده کرد که در آخرین مثال به آن اشاره می کنم.</p>
<p style="text-align: justify;">لامبدا را به روش های گوناگونی می توان نوشت که در ادامه توضیح خواهم داد ولی روش کلی آن بصورت زیر است:</p>
<pre class="crayon-plain-tag">parameter -&gt; expression body</pre>
<p style="text-align: justify;">قسمت اول همانطور که مشخص است پارامترهای ورودی و بخش دوم بدنه می باشد.</p>
<p style="text-align: justify;">برای استفاده از امکانات Lambda Expression در Android Studio باید فایل Gradle را بصورت زیر تغییر دهید:</p>
<pre class="crayon-plain-tag">apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.0'
    defaultConfig {
        applicationId "com.example.mtajik.accounttest"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        //for using java 8 and it's features like lambda expressions
        jackOptions { enabled true }


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main {
            aidl.srcDirs = ['src/main/aidl']
        }
    }


    //for using java 8 and it's features like lambda expressions
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}</pre>
<p style="text-align: justify;">در کلاس زیر مثال چند توع لامبدا را خواهید دید. لامبدا اکسپرشن با نوع ورودی و بدون نوع ورودی، با بلاکی از کد و غیره.</p>
<pre class="crayon-plain-tag">1.  () -&gt; 5                                // takes no value and returns 5
2.  x -&gt; 2 * x                         // takes a number and returns the result of doubling it
3.  (x, y) -&gt; x – y                           // takes two numbers and returns their difference
4.  (int x, int y) -&gt; x + y                 // takes two integers and returns their sum
5.  (String s) -&gt; System.out.print(s)     // takes a string and prints it to console without returning anything</pre>
<p style="text-align: justify;">به مثال های زیر را اجرا کرده و خروجی را ملاحظه نمایید:</p>
<pre class="crayon-plain-tag">public class Java8Tester {
    public static void main(String args[]){
        Java8Tester tester = new Java8Tester();

        //with type declaration
        MathOperation addition = (int a, int b) -&gt; a + b;

        //with out type declaration
        MathOperation subtraction = (a, b) -&gt; a - b;

        //with return statement along with curly braces
        MathOperation multiplication = (int a, int b) -&gt; { return a * b; };

        //without return statement and without curly braces
        MathOperation division = (int a, int b) -&gt; a / b;

        System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
        System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
        System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
        System.out.println("10 / 5 = " + tester.operate(10, 5, division));

        //with parenthesis
        GreetingService greetService1 = message -&gt;
                System.out.println("Hello " + message);

        //without parenthesis
        GreetingService greetService2 = (message) -&gt; {
            System.out.println("Hello my friend " + message);
            return;
        } ;

        //---without Lambda Expression
        GreetingService greetService3WithOutLambda = new GreetingService() {
            @Override
            public void sayMessage(String message) {
                System.out.println("Hello my friend " + message);
            }
        };

        greetService1.sayMessage("mahdi");
        greetService2.sayMessage("mahdi");
        greetService3WithOutLambda.sayMessage("mahdi");

        //sorting with Lambda Expression
        List&lt;String&gt; list = Arrays.asList("looooong", "short", "tiny" );
        Collections.sort(list, (String s1, String s2) -&gt; s1.length() + s2.length());
        System.out.println(list);

    }

    interface MathOperation {
        int operation(int a, int b);
    }

    interface GreetingService {
        void sayMessage(String message);
    }

    private int operate(int a, int b, MathOperation mathOperation){
        return mathOperation.operation(a, b);
    }
}</pre>
<p style="text-align: justify;">همانطور که ملاحظه می کنید اینترفیس هایی داریم که تعریف بدنه تابع های آن را با لامبدا اکسپرشن انجام دادیم. نمونه بدون لامبدااکسپرشن تابع greetiservice3WithoutLambda می باشد. همچنین با استفاده از لامبدا می توانید از روش مرتب سازی بالا نیز استفاده کنید. ( به قسمت sort توجه کنید)  که برخلاف روش های گذشته بسیار ساده تر است. یعنی به جای نوشتن کلاس comparator به صورت مجزا، آن را بصورت لامبدا اکسپرشن در خود ورودی تولید کردیم.</p>
<p style="text-align: justify;">یا اینکه بجای کد زیر :</p>
<pre class="crayon-plain-tag">LiveViewManager.registerView(QKPreference.HIDE_AVATAR_CONVERSATIONS, this, new LiveView() {
    @Override
    public void refresh(String key) {
        holder.mAvatarView.setVisibility(mContext.getBoolean(QKPreference.HIDE_AVATAR_CONVERSATIONS) ? View.GONE : View.VISIBLE);
    }
});</pre>
<p style="text-align: justify;">بنویسم:</p>
<pre class="crayon-plain-tag">LiveViewManager.registerView(QKPreference.HIDE_AVATAR_CONVERSATIONS, this, key -&gt;
        holder.mAvatarView.setVisibility(mContext.getBoolean(QKPreference.HIDE_AVATAR_CONVERSATIONS) ? View.GONE : View.VISIBLE));</pre>
<p style="text-align: justify;">همانطور که دیدید به جای new کردن Interface و سپس پاس دادن آن به تابع، بصورت مستقیم با لامبدا پاس دادیم.</p>
<p>&nbsp;</p>
<p>منبع: <a href="http://www.biitecode.ir" target="_blank" rel="noopener">بایت کد</a></p>
<p>&nbsp;</p>
<p>نوشته <a rel="nofollow" href="http://www.mahditajik.ir/lambda-expression/">Lambda Expression چیست و چگونه در جاوا استفاده می شود</a> اولین بار در <a rel="nofollow" href="http://www.mahditajik.ir">Mahdi Tajik</a> پدیدار شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://www.mahditajik.ir/lambda-expression/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
