JavaRush /جاوا بلاگ /Random-UR /جاوا 8 کی خصوصیات - حتمی گائیڈ (حصہ 1)
0xFF
سطح
Донецк

جاوا 8 کی خصوصیات - حتمی گائیڈ (حصہ 1)

گروپ میں شائع ہوا۔
مضمون جاوا 8 فیچرز کے ترجمے کا پہلا حصہ – دی الٹی میٹ گائیڈ ۔ دوسرا حصہ یہاں ہے (لنک تبدیل ہوسکتا ہے)۔ جاوا 8 کی خصوصیات - آخری گائیڈ (حصہ 1) - 1 ایڈیٹر کا نوٹ : یہ مضمون اس وقت شائع ہوا جب جاوا 8 عوام کے لیے دستیاب تھا اور تمام اشارے یہ ہیں کہ یہ واقعی ایک بڑا ورژن ہے۔ یہاں ہم نے جاوا کوڈ گیکس گائیڈز وافر مقدار میں فراہم کیے ہیں جیسے کہ جاوا 8 کے ساتھ کھیلنا – لیمبڈاس اور کنکرنسی ، جاوا 8 ڈیٹ اینڈ ٹائم API گائیڈ: لوکل ڈیٹ ٹائم اور خلاصہ کلاس بمقابلہ جاوا 8 ایرا میں انٹرفیس ۔ ہم دوسرے ذرائع سے 15 لازمی پڑھنے والے Java 8 ٹیوٹوریلز سے بھی لنک کرتے ہیں ۔ یقیناً ہم کچھ نشیب و فراز کو دیکھتے ہیں، جیسے جاوا 8 کا ڈارک سائیڈ ۔ لہذا، یہ آپ کی سہولت کے لیے Java 8 کی تمام اہم خصوصیات کو ایک جگہ جمع کرنے کا وقت ہے۔ لطف اٹھائیں!

1. تعارف

بلا شبہ، جاوا 8 کی ریلیز جاوا 5 کے بعد سب سے بڑا واقعہ ہے (کافی عرصہ پہلے، 2004 میں ریلیز ہوا)۔ اس نے جاوا میں زبان، کمپائلر، لائبریری، ٹولز اور JVM (جاوا ورچوئل مشین) دونوں میں بہت سی نئی خصوصیات لائی ہیں۔ اس ٹیوٹوریل میں، ہم ان تبدیلیوں پر ایک نظر ڈالیں گے اور حقیقی زندگی کی مثالوں کے ساتھ مختلف استعمال کے معاملات کو ظاہر کریں گے۔ گائیڈ کئی حصوں پر مشتمل ہے، جن میں سے ہر ایک پلیٹ فارم کے ایک مخصوص پہلو کو حل کرتا ہے:
  • زبان
  • مرتب کرنے والا
  • لائبریریاں
  • اوزار
  • رن ٹائم ماحولیات (JVM)

2. جاوا 8 میں نئی ​​خصوصیات

کسی بھی صورت میں، جاوا 8 ایک بڑی ریلیز ہے۔ ہم کہہ سکتے ہیں کہ اس میں ان خصوصیات کے نفاذ کی وجہ سے اتنا وقت لگا جس کی ہر جاوا ڈویلپر تلاش کر رہا تھا۔ اس سیکشن میں ہم ان میں سے بیشتر کا احاطہ کرنے جا رہے ہیں۔

2.1 لیمبڈاس اور فنکشنل انٹرفیس

لیمبڈاس (جسے پرائیویٹ یا گمنام طریقے بھی کہا جاتا ہے) پورے Java 8 ریلیز میں زبان کی سب سے بڑی اور سب سے زیادہ متوقع تبدیلی ہے۔ وہ ہمیں طریقہ کار کی دلیل کے طور پر (اس کے ارد گرد کسی فنکشن کا اعلان کرکے)، یا کوڈ کو ڈیٹا کے طور پر بیان کرنے کی اجازت دیتے ہیں۔ : ایسے تصورات جن سے ہر فنکشنلٹی ڈویلپر واقف ہے۔ پروگرامنگ _ JVM پلیٹ فارم پر بہت سی زبانوں (Groovy, Scala , ...) میں پہلے دن سے لیمبڈا موجود تھے، لیکن جاوا کے ڈویلپرز کے پاس گمنام کلاسز کے ذریعے لیمبڈا کی نمائندگی کے سوا کوئی چارہ نہیں تھا۔ لیمبڈاس کے ڈیزائن پر بحث کرنے میں عوام کی طرف سے کافی وقت اور محنت لگ گئی۔ لیکن آخر کار سمجھوتہ پایا گیا، جس کی وجہ سے نئے جامع ڈیزائن سامنے آئے۔ اس کی آسان ترین شکل میں، ایک لیمبڈا کو پیرامیٹرز کی کوما سے الگ کردہ فہرست، a –> علامت ، اور ایک باڈی کے طور پر پیش کیا جا سکتا ہے۔ مثال کے طور پر:
Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) )
نوٹ کریں کہ دلیل e کی قسم کا تعین کمپائلر کے ذریعے کیا جاتا ہے۔ مزید برآں، آپ پیرامیٹر کو قوسین میں لپیٹ کر واضح طور پر پیرامیٹر کی قسم کی وضاحت کر سکتے ہیں۔ مثال کے طور پر:
Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );
اگر لیمبڈا باڈی زیادہ پیچیدہ ہے، تو اسے گھوبگھرالی منحنی خطوط وحدانی میں لپیٹا جا سکتا ہے، جیسا کہ جاوا میں ایک باقاعدہ فنکشن کی تعریف ہے۔ مثال کے طور پر:
Arrays.asList( "a", "b", "d" ).forEach( e -< {
    System.out.print( e );
    System.out.print( e );
} );
ایک لیمبڈا کلاس ممبران اور مقامی متغیرات کا حوالہ دے سکتا ہے (مطلب طور پر کال کو موثر بناتا ہے قطع نظر اس سے قطع نظر کہ finalفیلڈ تک رسائی ہے یا نہیں)۔ مثال کے طور پر، یہ 2 ٹکڑے برابر ہیں:
String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach(
    ( String e ) -> System.out.print( e + separator ) );
اور:
final String separator = ",";
Arrays.asList( "a", "b", "d" ).forEach(
    ( String e ) -> System.out.print( e + separator ) );
لیمبڈاس ایک قدر واپس کر سکتا ہے۔ واپسی کی قسم کا تعین کمپائلر کے ذریعے کیا جائے گا۔ returnاگر لیمبڈا کا جسم ایک لائن پر مشتمل ہو تو اعلان کی ضرورت نہیں ہے۔ ذیل کے دو کوڈ کے ٹکڑے برابر ہیں:
Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) );
اور:
Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {
    int result = e1.compareTo( e2 );
    return result;
} );
لینگویج ڈویلپرز نے طویل عرصے تک سوچا کہ موجودہ فنکشنز کو لیمبڈا کے موافق کیسے بنایا جائے۔ نتیجے کے طور پر، ایک فعال انٹرفیس کا تصور ابھرا. ایک فنکشنل انٹرفیس ایک انٹرفیس ہے جس میں صرف ایک طریقہ ہے۔ نتیجے کے طور پر، اسے واضح طور پر لیمبڈا اظہار میں تبدیل کیا جا سکتا ہے۔ java.lang.Runnableاور java.util.concurrent.Callableفنکشنل انٹرفیس کی دو بڑی مثالیں۔ عملی طور پر، فنکشنل انٹرفیس بہت نازک ہوتے ہیں: اگر کوئی انٹرفیس کی تعریف میں ایک اور طریقہ بھی شامل کرتا ہے، تو یہ مزید فعال نہیں رہے گا اور تالیف کا عمل مکمل نہیں ہوگا۔ اس نزاکت سے بچنے اور انٹرفیس کے ارادے کو واضح طور پر فعال کرنے کے لیے، جاوا 8 میں ایک خصوصی تشریح شامل کی گئی تھی @FunctionalInterface(جاوا لائبریری میں موجود تمام انٹرفیسز کو @FunctionalInterface تشریح موصول ہوئی تھی)۔ آئیے ایک فنکشنل انٹرفیس کی اس سادہ تعریف کو دیکھتے ہیں:
@FunctionalInterface
public interface Functional {
    void method();
}
ذہن میں رکھنے کے لئے ایک چیز ہے: پہلے سے طے شدہ طریقے اور جامد طریقے فنکشنل انٹرفیس کے اصول کی خلاف ورزی نہیں کرتے ہیں اور اسے قرار دیا جا سکتا ہے:
@FunctionalInterface
public interface FunctionalDefaultMethods {
    void method();

    default void defaultMethod() {
    }
}
Lambdas جاوا 8 کی سب سے مقبول خصوصیت ہے۔ ان کے پاس اس شاندار پلیٹ فارم کی طرف مزید ڈویلپرز کو راغب کرنے اور خالص جاوا میں خصوصیات کے لیے اسمارٹ سپورٹ فراہم کرنے کی تمام صلاحیتیں ہیں۔ مزید تفصیلی معلومات کے لیے، براہ کرم سرکاری دستاویزات سے رجوع کریں ۔

2.2 پہلے سے طے شدہ انٹرفیس اور جامد طریقے

جاوا 8 نے انٹرفیس کی تعریف کو دو نئے تصورات کے ساتھ بڑھایا: ڈیفالٹ طریقہ اور جامد طریقہ۔ پہلے سے طے شدہ طریقے انٹرفیس کو کسی حد تک خصلتوں سے ملتے جلتے بناتے ہیں، لیکن قدرے مختلف مقصد کو پورا کرتے ہیں۔ وہ آپ کو ان انٹرفیس کے پہلے لکھے ہوئے ورژن کے لیے پسماندہ مطابقت کو توڑے بغیر موجودہ انٹرفیس میں نئے طریقے شامل کرنے کی اجازت دیتے ہیں۔ پہلے سے طے شدہ طریقوں اور تجریدی طریقوں کے درمیان فرق یہ ہے کہ تجریدی طریقوں کو لاگو کیا جانا چاہئے جبکہ پہلے سے طے شدہ طریقے نہیں ہیں۔ اس کے بجائے، ہر انٹرفیس کو ایک نام نہاد ڈیفالٹ نفاذ فراہم کرنا چاہیے، اور تمام اولاد اسے بطور ڈیفالٹ وصول کریں گے (اگر ضروری ہو تو اس ڈیفالٹ نفاذ کو اوور رائڈ کرنے کی صلاحیت کے ساتھ)۔ آئیے ذیل کی مثال کو دیکھیں۔
private interface Defaulable {
    // Интерфейсы теперь разрешают методы по умолчанию,
    // клиент может реализовывать  (переопределять)
    // or не реализовывать его
    default String notRequired() {
        return "Default implementation";
    }
}

private static class DefaultableImpl implements Defaulable {
}

private static class OverridableImpl implements Defaulable {
    @Override
    public String notRequired() {
        return "Overridden implementation";
    }
}
انٹرفیس طریقہ کی تعریف کے حصے کے طور پر کلیدی لفظ کا استعمال کرتے ہوئے Defaulableایک طے شدہ طریقہ کا اعلان کرتا ہے ۔ کلاسوں میں سے ایک، اس انٹرفیس کو پہلے سے طے شدہ طریقہ کو چھوڑ کر لاگو کرتا ہے۔ ایک اور کلاس، پہلے سے طے شدہ نفاذ کو اوور رائیڈ کرتی ہے اور خود فراہم کرتی ہے۔ جاوا 8 میں متعارف کرائی گئی ایک اور دلچسپ خصوصیت یہ ہے کہ انٹرفیس جامد طریقوں کا اعلان (اور نفاذ کی پیشکش) کر سکتے ہیں۔ یہاں ایک مثال ہے: notRequired()defaultDefaultableImplOverridableImpl
private interface DefaulableFactory {
    // Interfaces now allow static methods
    static Defaulable create( Supplier<Defaulable> supplier ) {
        return supplier.get();
    }
}
کوڈ کا ایک چھوٹا ٹکڑا اوپر کی مثال سے طے شدہ طریقہ اور جامد طریقہ کو یکجا کرتا ہے:
public static void main( String[] args ) {
    Defaulable defaulable = DefaulableFactory.create( DefaultableImpl::new );
    System.out.println( defaulable.notRequired() );

    defaulable = DefaulableFactory.create( OverridableImpl::new );
    System.out.println( defaulable.notRequired() );
}
اس پروگرام کا کنسول آؤٹ پٹ اس طرح لگتا ہے:
Default implementation
Overridden implementation
JVM میں پہلے سے طے شدہ طریقہ کا نفاذ بہت موثر ہے اور طریقہ کی درخواست کو بائی کوڈ ہدایات کے ذریعے سپورٹ کیا جاتا ہے۔ پہلے سے طے شدہ طریقوں نے تالیف کے عمل کو توڑے بغیر موجودہ جاوا انٹرفیس کو تیار کرنے کی اجازت دی۔ اچھی مثالیں انٹرفیس میں شامل کیے گئے بہت سے طریقے ہیں java.util.Collection: stream(), parallelStream(), forEach(), removeIf(), ... اگرچہ طاقتور ہونے کے باوجود پہلے سے طے شدہ طریقوں کو احتیاط کے ساتھ استعمال کیا جانا چاہیے: پہلے سے طے شدہ طریقہ کا اعلان کرنے سے پہلے، آپ کو دو بار سوچنا چاہیے کہ آیا یہ واقعی ضروری ہے کیوں کہ اس کی وجہ یہ ہو سکتی ہے۔ پیچیدہ درجہ بندی میں ابہام اور غلطیوں کو مرتب کرنا۔ مزید تفصیلی معلومات کے لیے، براہ کرم دستاویزات سے رجوع کریں ۔

2.3 حوالہ کے طریقے

حوالہ کے طریقے موجودہ طریقوں یا جاوا کلاسز یا اشیاء (مثالوں) کے کنسٹرکٹرز کا حوالہ دینے کے لیے مفید نحو کو نافذ کرتے ہیں۔ لیمبڈا اظہار کے ساتھ، حوالہ جات کے طریقے زبان کی ساخت کو کمپیکٹ اور جامع بناتے ہیں، اسے ٹیمپلیٹ پر مبنی بناتے ہیں۔ ذیل میں مختلف طریقوں کی تعریفوں کی ایک مثال کے طور پر ایک کلاس ہے Car، آئیے حوالہ کے طریقوں کی چار معاون اقسام کو اجاگر کرتے ہیں:
public static class Car {
    public static Car create( final Supplier<Car> supplier ) {
        return supplier.get();
    }

    public static void collide( final Car car ) {
        System.out.println( "Collided " + car.toString() );
    }

    public void follow( final Car another ) {
        System.out.println( "Following the " + another.toString() );
    }

    public void repair() {
        System.out.println( "Repaired " + this.toString() );
    }
}
پہلا حوالہ طریقہ نحو کے ساتھ کنسٹرکٹر کا حوالہ ہے Class::newیا generics کا متبادل Class< T >::new۔ نوٹ کریں کہ کنسٹرکٹر کے پاس کوئی دلیل نہیں ہے۔
final Car car = Car.create( Car::new );
final List<Car> cars = Arrays.asList( car );
دوسرا آپشن نحو کے ساتھ ایک جامد طریقہ کا حوالہ ہے Class::static_method۔ نوٹ کریں کہ طریقہ ٹائپ کا بالکل ایک پیرامیٹر لیتا ہے Car۔
cars.forEach( Car::collide );
تیسری قسم نحو کے ساتھ کسی خاص قسم کی صوابدیدی چیز کی مثال کے طریقہ کار کا حوالہ ہے Class::method۔ نوٹ کریں کہ طریقہ کار کے ذریعہ کوئی دلیل قبول نہیں کی جاتی ہے۔
cars.forEach( Car::repair );
اور آخری، چوتھی قسم نحو کے ساتھ مخصوص کلاس کی مثال کے طریقہ کار کا حوالہ ہے instance::method۔ براہ کرم نوٹ کریں کہ طریقہ صرف قسم کا ایک پیرامیٹر قبول کرتا ہے Car۔
final Car police = Car.create( Car::new );
cars.forEach( police::follow );
ان تمام مثالوں کو جاوا پروگرام کے طور پر چلانے سے درج ذیل کنسول آؤٹ پٹ پیدا ہوتا ہے (کلاس کا حوالہ Carمختلف ہو سکتا ہے):
Collided com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d
Repaired com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d
Following the com.javacodegeeks.java8.method.references.MethodReferences$Car@7a81197d
مزید تفصیلی معلومات اور حوالہ جات کے طریقوں کی تفصیلات کے لیے، براہ کرم سرکاری دستاویزات سے رجوع کریں ۔

2.4 ڈپلیکیٹ تشریحات

چونکہ جاوا 5 نے تشریحات کے لیے سپورٹ متعارف کرایا ہے ، یہ فیچر بہت مقبول اور بہت وسیع پیمانے پر استعمال ہو چکا ہے۔ تاہم، تشریحات کے استعمال کی ایک حد یہ تھی کہ ایک ہی تشریح کو ایک ہی جگہ پر ایک سے زیادہ مرتبہ قرار نہیں دیا جا سکتا۔ جاوا 8 اس اصول کو توڑتا ہے اور ڈپلیکیٹ تشریحات متعارف کراتا ہے۔ یہ ایک ہی تشریحات کو اس جگہ پر متعدد بار دہرانے کی اجازت دیتا ہے جہاں ان کا اعلان کیا گیا ہے۔ ڈپلیکیٹ تشریحات کو تشریح کا استعمال کرتے ہوئے خود کو تشریح کرنا چاہئے @Repeatable۔ درحقیقت یہ زبان میں اتنی تبدیلی نہیں ہے کیونکہ یہ ایک کمپائلر ٹرک ہے، جبکہ تکنیک وہی رہتی ہے۔ آئیے ایک سادہ مثال دیکھیں:
package com.javacodegeeks.java8.repeatable.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

public class RepeatingAnnotations {
    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    public @interface Filters {
        Filter[] value();
    }

    @Target( ElementType.TYPE )
    @Retention( RetentionPolicy.RUNTIME )
    @Repeatable( Filters.class )
    public @interface Filter {
        String value();
    };

    @Filter( "filter1" )
    @Filter( "filter2" )
    public interface Filterable {
    }

    public static void main(String[] args) {
        for( Filter filter: Filterable.class.getAnnotationsByType( Filter.class ) ) {
            System.out.println( filter.value() );
        }
    }
}
جیسا کہ ہم دیکھ سکتے ہیں، کلاس کو Filter@Repeatable (فلٹرز class) کے ساتھ تشریح کیا گیا ہے۔ Filtersصرف تشریحات کا مالک ہے Filter، لیکن جاوا کمپائلر ڈویلپرز سے اپنی موجودگی چھپانے کی کوشش کرتا ہے۔ اس طرح، انٹرفیس Filterableمیں تشریحات شامل ہیں Filterجن کا اعلان دو بار کیا جاتا ہے (بغیر ذکر کیے Filters)۔ Reflection API getAnnotationsByType()کسی قسم کی ڈپلیکیٹ تشریحات واپس کرنے کے لیے ایک نیا طریقہ بھی فراہم کرتا ہے (یاد رکھیں کہ classFilterable . پروگرام کا آؤٹ پٹ اس طرح نظر آئے گا: classFilters
filter1
filter2
مزید تفصیلی معلومات کے لیے، براہ کرم سرکاری دستاویزات سے رجوع کریں ۔

2.5 بہتر قسم کا اندازہ

جاوا 8 کمپائلر نے بہت سے قسم کے انفرنس میں بہتری حاصل کی ہے۔ بہت سے معاملات میں، کمپائلر کے ذریعے واضح قسم کے پیرامیٹرز کی وضاحت کی جا سکتی ہے، اس طرح کوڈ کو کلینر بنا دیا جاتا ہے۔ آئیے ایک مثال دیکھتے ہیں:
package com.javacodegeeks.java8.type.inference;

public class Value<T> {
    public static<T> T defaultValue() {
        return null;
    }

    public T getOrDefault( T value, T defaultValue ) {
        return ( value != null ) ? value : defaultValue;
    }
}
اور یہاں قسم کے ساتھ استعمال ہے Value<String>:
package com.javacodegeeks.java8.type.inference;

public class TypeInference {
    public static void main(String[] args) {
        final Value<String> value = new Value<>();
        value.getOrDefault( "22", Value.defaultValue() );
    }
}
قسم کا پیرامیٹر Value.defaultValue()خود بخود طے ہوتا ہے اور اسے واضح طور پر فراہم کرنے کی ضرورت نہیں ہے۔ جاوا 7 میں، وہی مثال مرتب نہیں ہوگی اور اسے <NOBR>Value.<String>defaultValue()</NOBR> کے طور پر دوبارہ لکھا جانا چاہیے۔

2.6۔ توسیعی تشریح کی حمایت

جاوا 8 سیاق و سباق کو پھیلاتا ہے جہاں تشریحات استعمال کی جا سکتی ہیں۔ آج کل، تقریباً کسی بھی چیز کی تشریح ہو سکتی ہے: مقامی متغیرات، عام قسمیں، سپر کلاسز اور نافذ کردہ انٹرفیس، یہاں تک کہ طریقہ کار کی مستثنیات۔ ذیل میں چند مثالیں پیش کی جاتی ہیں:
package com.javacodegeeks.java8.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.Collection;

public class Annotations {
    @Retention( RetentionPolicy.RUNTIME )
    @Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )
    public @interface NonEmpty {
    }

    public static class Holder<@NonEmpty T> extends @NonEmpty Object {
        public void method() throws @NonEmpty Exception {
        }
    }

    @SuppressWarnings( "unused" )
    public static void main(String[] args) {
        final Holder<String> holder = new @NonEmpty Holder<String>();
        @NonEmpty Collection<@NonEmpty String> strings = new ArrayList<>();
    }
}
ElementType.TYPE_USEاور ElementType.TYPE_PARAMETERمتعلقہ تشریحی سیاق و سباق کو بیان کرنے کے لیے دو نئے عنصر کی اقسام۔ Annotation Processing APIجاوا میں تشریح کی نئی اقسام کو پہچاننے کے لیے معمولی تبدیلیاں بھی کی گئی ہیں۔

3. جاوا کمپائلر میں نئی ​​خصوصیات

3.1 پیرامیٹر کے نام

وقت کے ساتھ ساتھ، جاوا کے ڈویلپرز نے جاوا بائیک کوڈ میں طریقہ پیرامیٹر کے ناموں کو رن ٹائم پر دستیاب کرنے کے لیے مختلف طریقے ایجاد کیے ہیں (مثال کے طور پر، Paranamer library )۔ آخر میں، Java 8 اس مشکل فنکشن کو زبان میں تخلیق کرتا ہے (Reflection API اور method کا استعمال کرتے ہوئے Parameter.getName()) اور bytecode (نئے کمپائلر آرگومنٹ کا استعمال کرتے ہوئے javac:) –parameters۔
package com.javacodegeeks.java8.parameter.names;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class ParameterNames {
    public static void main(String[] args) throws Exception {
        Method method = ParameterNames.class.getMethod( "main", String[].class );
        for( final Parameter parameter: method.getParameters() ) {
            System.out.println( "Parameter: " + parameter.getName() );
        }
    }
}
اگر آپ دلیل استعمال کیے بغیر اس کلاس کو مرتب کرتے ہیں –parametersاور پھر پروگرام چلاتے ہیں تو آپ کو کچھ اس طرح نظر آئے گا:
Parameter: arg0
کمپائلر کے پاس پیرامیٹر کے ساتھ –parameters، پروگرام کی پیداوار مختلف ہوگی (پیرامیٹر کا اصل نام دکھایا جائے گا):
Parameter: args
جدید ماون صارفین کے لیے ، سیکشن کا استعمال کرتے ہوئے تالیف میں -parameters دلیل شامل کی جا سکتی ہے maven-compiler-plugin:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
    <compilerArgument>-parameters</compilerArgument>
    <source>1.8</source>
    <target>1.8</target>
    </configuration>
</plugin>
پیرامیٹر کے ناموں کی دستیابی کو چیک کرنے کے لیے isNamePresent()کلاس کی طرف سے فراہم کردہ ایک آسان طریقہ ہے Parameter۔

4. نئے جاوا ٹولز

جاوا 8 کمانڈ لائن ٹولز کے ایک نئے سیٹ کے ساتھ آتا ہے۔ اس سیکشن میں ہم ان میں سے سب سے زیادہ دلچسپ کو دیکھیں گے۔

4.1 نیشورن انجن: جے ایس

jjs ایک اسٹینڈ اسٹون نیشورن انجن ہے جو کمانڈ لائن پر مبنی ہے۔ یہ JavaScript سورس کوڈ فائلوں کی فہرست لیتا ہے اور انہیں چلاتا ہے۔ مثال کے طور پر، آئیے درج ذیل مواد کے ساتھ ایک func.js فائل بنائیں:
function f() {
     return 1;
};

print( f() + 1 );
اس فائل کو چلانے کے لیے آئیے اسے jjs کو دلیل کے طور پر منتقل کریں :
jjs func.js
کنسول آؤٹ پٹ اس طرح ہوگا:
2
مزید تفصیلات کے لیے دستاویزات دیکھیں ۔

4.2 کلاس انحصار تجزیہ کار: jdeps

jdeps واقعی ایک زبردست کمانڈ لائن ٹول ہے۔ یہ جاوا کلاسز کے لیے پیکیج یا کلاس لیول پر انحصار دکھاتا ہے۔ یہ کلاس فائل، فولڈر یا JAR فائل کو بطور ان پٹ قبول کرتا ہے۔ پہلے سے طے شدہ طور پر ، jdeps معیاری آؤٹ پٹ (کنسول) پر انحصار کو آؤٹ پٹ کرتا ہے۔ مثال کے طور پر، آئیے اسپرنگ فریم ورک کی مقبول لائبریری کی انحصاری رپورٹ کو دیکھیں ۔ مثال کو مختصر رکھنے کے لیے، آئیے صرف JAR فائل کے لیے انحصار کو دیکھیں org.springframework.core-3.0.5.RELEASE.jar۔
jdeps org.springframework.core-3.0.5.RELEASE.jar
یہ کمانڈ بہت زیادہ آؤٹ پٹ کرتی ہے، لہذا ہم صرف آؤٹ پٹ کے کچھ حصے کا تجزیہ کریں گے۔ انحصار کو پیکجوں کے لحاظ سے گروپ کیا جاتا ہے۔ اگر کوئی انحصار نہیں ہے تو نہیں ملا ظاہر کیا جائے گا ۔
org.springframework.core-3.0.5.RELEASE.jar -> C:\Program Files\Java\jdk1.8.0\jre\lib\rt.jar
   org.springframework.core (org.springframework.core-3.0.5.RELEASE.jar)
      -> java.io
      -> java.lang
      -> java.lang.annotation
      -> java.lang.ref
      -> java.lang.reflect
      -> java.util
      -> java.util.concurrent
      -> org.apache.commons.logging                         not found
      -> org.springframework.asm                            not found
      -> org.springframework.asm.commons                    not found
   org.springframework.core.annotation (org.springframework.core-3.0.5.RELEASE.jar)
      -> java.lang
      -> java.lang.annotation
      -> java.lang.reflect
      -> java.util
مزید تفصیلی معلومات کے لیے، براہ کرم سرکاری دستاویزات سے رجوع کریں ۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION