JavaRush /جاوا بلاگ /Random-SD /جاوا 8 خاصيتون - آخري گائيڊ (حصو 1)
0xFF
سطح
Донецк

جاوا 8 خاصيتون - آخري گائيڊ (حصو 1)

گروپ ۾ شايع ٿيل
مضمون جاوا 8 فيچرز جي ترجمي جو پهريون حصو - الٽيميٽ گائيڊ . ٻيو حصو هتي آهي (لنڪ تبديل ٿي سگهي ٿي). جاوا 8 خاصيتون - آخري گائيڊ (حصو 1) - 1 ايڊيٽر جو نوٽ : هي مضمون شايع ڪيو ويو جڏهن Java 8 عوام لاءِ دستياب هو ۽ سڀ اشارا آهن ته هي واقعي هڪ وڏو نسخو آهي. هتي اسان مهيا ڪيو آهي جاوا ڪوڊ گيڪس گائيڊز ڪافي مقدار ۾ جيئن ته Playing with Java 8 – Lambdas and Concurrency , Java 8 Date and Time API گائيڊ: LocalDateTime and Abstract Class vs. Interface in the Java 8 Era . اسان ٻين ذريعن کان 15 جاوا 8 سبق لازمي پڙهڻ سان پڻ ڳنڍيون ٿا . يقينن اسان کي ڪجهه هيٺيون پاسي نظر اچن ٿا، جهڙوڪ جاوا 8 جي اونداهي پاسي . تنهن ڪري، اهو وقت آهي جاوا 8 جي سڀني مکيه خاصيتن کي گڏ ڪرڻ لاء هڪ جڳهه تي توهان جي سهولت لاء. مزو وٺو!

1. تعارف

بغير ڪنهن شڪ جي، جاوا 8 جي ڇڏڻ جاوا 5 کان پوء سڀ کان وڏو واقعو آهي (ڪافي وقت اڳ، 2004 ۾ جاري ڪيو ويو). اهو جاوا لاءِ ڪيتريون ئي نيون خاصيتون کڻي آيو ٻنهي ٻولين ۾، مرتب ڪندڙ، لائبريريون، اوزار ۽ JVM (جاوا ورچوئل مشين). هن سبق ۾، اسان انهن تبديلين تي هڪ نظر وجهنداسين ۽ مختلف استعمال جي ڪيسن کي حقيقي زندگي جي مثالن سان ڏيکارينداسين. ھدايت ڪيترن ئي حصن تي مشتمل آھي، جن مان ھر ھڪ پليٽ فارم جي ھڪڙي خاص حصي کي خطاب ڪري ٿو:
  • ٻولي
  • مرتب ڪندڙ
  • لائبريريون
  • اوزار
  • رن ٽائيم ماحول (JVM)

2. جاوا 8 ۾ نيون خاصيتون

ڪنهن به صورت ۾، جاوا 8 هڪ اهم رليز آهي. اسان اهو چئي سگهون ٿا ته اهو تمام گهڻو وقت ورتو ڇاڪاڻ ته انهن خاصيتن جي نفاذ جي ڪري هر جاوا ڊولپر ڳولي رهيو هو. هن حصي ۾ اسان انهن مان گھڻا کي ڍڪڻ وارا آهيون.

2.1. Lambdas ۽ فنڪشنل انٽرفيس

Lambdas (جنهن کي پرائيويٽ يا گمنام طريقن سان پڻ سڃاتو وڃي ٿو) سڄي جاوا 8 رليز ۾ سڀ کان وڏي ۽ سڀ کان وڌيڪ متوقع ٻولي تبديليون آهن. اهي اسان کي اجازت ڏين ٿيون فنڪشنلٽي کي هڪ طريقي جي دليل جي طور تي (ان جي چوڌاري هڪ فنڪشن جو اعلان ڪندي)، يا ڪوڊ کي ڊيٽا طور بيان ڪرڻ. : تصورات جيڪي هر ڪارڪردگي ڊولپر کان واقف آهن پروگرامنگ _ JVM پليٽ فارم تي ڪيتريون ئي ٻوليون (Groovy, Scala , ...) پهرين ڏينهن کان ليمبڊاس هيون، پر جاوا ڊولپرز وٽ گمنام ڪلاسن ذريعي ليمبڊاس جي نمائندگي ڪرڻ کان سواءِ ٻيو ڪو رستو نه هو. ليمبڊاس جي ڊيزائن تي بحث ڪرڻ عوام کان گهڻو وقت ۽ ڪوشش ورتي. پر آخرڪار سمجھوتا ​​مليا، جن جي نتيجي ۾ نئين جامع ڊيزائن جي شروعات ٿي. ان جي آسان ترين شڪل ۾، هڪ ليمبڊا کي ڪاما سان الڳ ڪيل پيرا ميٽرز جي فهرست، a –> علامت ، ۽ هڪ جسم جي طور تي پيش ڪري سگهجي ٿو. مثال طور:
Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( 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 ) );
Lambdas هڪ قدر واپس ڪري سگهي ٿو. واپسي جو قسم مرتب ڪندڙ طرفان طئي ڪيو ويندو. هڪ اعلان 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هڪ ڊفالٽ طريقو بيان ڪري ٿو notRequired()هڪ لفظ استعمال ڪندي defaultطريقي جي تعريف جي حصي طور. طبقن مان هڪ، DefaultableImplهن انٽرفيس کي لاڳو ڪري ٿو ڊفالٽ طريقي کي ڇڏي جيئن آهي. ٻيو طبقو،،، OverridableImplڊفالٽ عمل درآمد کي ختم ڪري ٿو ۽ پنهنجو مهيا ڪري ٿو. جاوا 8 ۾ متعارف ٿيل هڪ ٻي دلچسپ خصوصيت اها آهي ته انٽرفيس جامد طريقن جو اعلان ڪري سگھن ٿا (۽ لاڳو ڪرڻ جي آڇ ڪري ٿو). هتي هڪ مثال آهي:
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()ڪجھ قسم جي نقل ڪيل تشريحون واپس ڪرڻ لاءِ ھڪڙو نئون طريقو پڻ مهيا ڪري ٿو (ياد رکو ته Filterable. class.getAnnotation( Filters. class) ھڪ ڪمپيلر-انجيڪٽ ٿيل مثال واپس ڪندو Filters). پروگرام جي پيداوار هن طرح نظر ايندي:
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 لائبريري ). آخرڪار، جاوا 8 هن ڏکئي فنڪشن کي ٻولي ۾ ٺاهي ٿو (ريفليڪشن API ۽ طريقو استعمال ڪندي Parameter.getName()) ۽ بائيٽ ڪوڊ (نئين مرتب ڪندڙ دليل استعمال ڪندي 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
ترقي يافته Maven استعمال ڪندڙن لاء ، -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. Nashorn انجڻ: jjs

jjs هڪ اسٽينڊل نيشورن انجڻ آهي جيڪو ڪمانڊ لائن تي ٻڌل آهي. اهو JavaScript سورس ڪوڊ فائلن جي هڪ فهرست وٺي ٿو ۽ انهن کي هلائي ٿو. مثال طور، اچو ته ھيٺ ڏنل مواد سان func.js فائل ٺاھيو:
function f() {
     return 1;
};

print( f() + 1 );
هن فائل کي هلائڻ لاءِ اچو ته ان کي دليل طور jjs ڏانهن منتقل ڪريون :
jjs func.js
ڪنسول جي پيداوار هن طرح ٿيندي:
2
وڌيڪ تفصيل لاءِ دستاويز ڏسو .

4.2. ڪلاس انحصار تجزيه ڪندڙ: jdeps

jdeps واقعي هڪ عظيم ڪمانڊ لائن اوزار آهي. اهو ڏيکاري ٿو پيڪيج يا ڪلاس ليول انحصار جاوا ڪلاسز لاءِ. اهو هڪ .class فائل، فولڊر يا 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