سؤال

لدي عمدا أبقى نفسي جافا n00b حتى وقت قريب ، و أول التعرض أحدثت صدمة طفيفة:جافا لا يكون C# خصائص النمط!

حسنا, أستطيع أن أعيش مع ذلك.ولكنني أستطيع أن أقسم أنني رأيت الملكية جالبة/واضع التعليمات البرمجية في جافا في برنامج واحد ولكن لا أستطيع أن أتذكر أين.كيف يتحقق ؟ هل هناك تمديد اللغة على ذلك ؟ هو ذات الصلة إلى NetBeans أو ما شابه ؟

هل كانت مفيدة؟

المحلول

هناك "القياسية" نمط حاصل على واضعي في جاوة ، ودعا فول خصائص.أساسا أي طريقة بدءا من get, اتخاذ الحجج و إرجاع قيمة, هي خاصية جالبة عن عقار اسمه مثل باقي الطريقة اسم (مع lowercased بداية الرسالة).وبالمثل set يخلق واضع من الفراغ الأسلوب مع حجة واحدة.

على سبيل المثال:

// Getter for "awesomeString"
public String getAwesomeString() {
  return awesomeString;
}

// Setter for "awesomeString"
public void setAwesomeString( String awesomeString ) {
  this.awesomeString = awesomeString;
}

معظم جافا ايديس سوف تولد هذه الطرق بالنسبة لك إذا كنت أطلب منهم (في الكسوف انها بسيطة مثل تحريك المؤشر إلى الحقل وضرب ctrl-1, ثم تحديد خيار من القائمة).

على ما يستحق ، لهذين يمكنك فعلا استخدام is و has في مكان get بالنسبة منطقية من نوع الخصائص أيضا ، كما في:

public boolean isAwesome();

public boolean hasAwesomeStuff();

نصائح أخرى

أنا مندهش من أن لا أحد ذكر المشروع لومبوك

نعم حاليا لا توجد خصائص في جاوة.هناك بعض الميزات في عداد المفقودين أيضا.
ولكن لحسن الحظ لدينا المشروع لومبوك التي تحاول تحسين الوضع.بل هو أيضا الحصول على شعبية أكثر وأكثر كل يوم.

لذا ، إذا كنت تستخدم لومبوك:

@Getter @Setter int awesomeInteger = 5;

هذا الرمز سوف تولد getAwesomeInteger و setAwesomeInteger وكذلك.لذلك هي مماثلة تماما C# السيارات-نفذت خصائص.

يمكنك الحصول على مزيد من المعلومات حول لومبوك حاصل على واضعي هنا.
يجب عليك بالتأكيد تحقق من ميزات أخرى وكذلك.المفضلة هي:

لومبوك هي متكاملة مع ايديس ، لذلك سوف تظهر ولدت أساليب مثل إذا كانت موجودة (الاقتراحات فئة المحتويات الذهاب إلى إعلان إعادة بيع ديون).
المشكلة الوحيدة مع لومبوك هو أن المبرمجين الآخرين قد لا يعرفون ذلك.يمكنك دائما delombok رمز ولكن هذا هو إلى حد ما الحل من الحل.

"جافا الملكية الدعم" اقترح جافا 7 ، ولكن لم يتم إجراء ذلك في اللغة.

انظر http://tech.puredanger.com/java7#property لمزيد من الروابط والمعلومات, اذا كانت مهتمة.

الفول الاتفاقية هو كتابة رمز مثل هذا:

private int foo;
public int getFoo() {
    return foo;
}
public void setFoo(int newFoo) {
    foo = newFoo;
}

في بعض اللغات الأخرى على JVM ، على سبيل المثال, رائع, يمكنك الحصول على للتجاوز خصائص مشابهة C# ، على سبيل المثال ،

int foo

والتي يتم الوصول إليها مع بسيطة .foo و روافع الافتراضي getFoo و setFoo تطبيقات التي يمكنك تجاوز الضرورة.

public class Animal {

    @Getter @Setter private String name;
    @Getter @Setter private String gender;
    @Getter @Setter private String species;
}

هذا هو شيء من هذا القبيل C# خصائص.انها http://projectlombok.org/

قد لا تحتاج من أجل "الحصول على" و "تعيين" البادئات ، لجعلها تبدو أكثر مثل خصائص قد تفعل ذلك من هذا القبيل:

public class Person {
    private String firstName = "";
    private Integer age = 0;

    public String firstName() { return firstName; } // getter
    public void firstName(String val) { firstName = val; } // setter

    public Integer age() { return age; } // getter
    public void age(Integer val) { age = val; } //setter

    public static void main(String[] args) {
        Person p = new Person();

        //set
        p.firstName("Lemuel");
        p.age(40);

        //get
        System.out.println(String.format("I'm %s, %d yearsold",
            p.firstName(),
            p.age());
    }
}

معظم بيئات التطوير جافا سوف تولد تلقائيا جالبة اضع رمز بالنسبة لك إذا كنت تريد لهم.هناك عدد من الاتفاقيات المختلفة ، IDE مثل الكسوف سوف تسمح لك لاختيار واحد التي تريد استخدامها ، حتى تمكنك من تحديد الخاصة بك.

الكسوف حتى يشمل الآلي إعادة بيع ديون من شأنها أن تسمح لك أن التفاف الملكية في جالبة واضعة وأنه سيتم تعديل كافة التعليمات البرمجية يصل مكان الإقامة مباشرة ، تجعل من استخدام جالبة و/أو واضع.

بالطبع الكسوف يمكن فقط تعديل التعليمات البرمجية أنه يعلم - أي تبعيات خارجية يجب أن تكون مكسورة مثل هذا إعادة بيع ديون.

من جيفري ريختر الكتاب CLR عن طريق C#:(أعتقد أن هذه قد تكون الأسباب خصائص لا تزال لا تضاف في جافا)

  • خاصية الأسلوب قد رمي استثناء ؛ الوصول الميداني لم يطرح استثناء.
  • خاصية لا يمكن تمرير مثل out أو ref المعلمة إلى الأسلوب ؛ حقل يمكن.
  • خاصية الأسلوب يمكن أن يستغرق وقتا طويلا لتنفيذ;مجال الوصول دائما يكمل على الفور.السبب الشائع استخدام خصائص أداء تزامن موضوع ، التي يمكن أن توقف الموضوع إلى الأبد ، وبالتالي ، يجب أن لا يكون استخدامها إذا تزامن موضوع مطلوب.في هذه الحالة الأسلوب المفضل.أيضا, إذا كان لديك فئة يمكن الوصول إليها عن بعد (على سبيل المثال ، صفك مشتق من System.MarshalByRefObject), الاتصال بمكان الإقامة الطريقة سوف تكون بطيئة جدا ، ولذلك فإن الأسلوب المفضل الممتلكات.في رأيي, دروس مستمدة من MarshalByRefObject لا ينبغي أبدا استخدام خصائص.
  • إذا دعا عدة مرات في صف واحد ، خاصية الأسلوب قد ترجع قيمة مختلفة لكل الوقت ؛ حقل ترجع نفس القيمة في كل مرة.على System.DateTime فئة لديها للقراءة فقط Now الممتلكات التي ترجع التاريخ والوقت الحالي.في كل مرة كنت الاستعلام هذا مكان الإقامة ، فإنه سيعود قيمة مختلفة.هذا خطأ و Microsoft يتمنى أن يمكن إصلاح الطبقة بجعل الآن طريقة بدلا من الملكية. Environment's TickCount الخاصية هي مثال آخر على هذا الخطأ.
  • خاصية الأسلوب قد يسبب ملاحظتها الآثار الجانبية.الوصول الميداني لم يفعل.في كلمات المستخدم من النوع يجب أن تكون قادرا على تعيين خصائص مختلفة يحددها نوع في أي من أجل أنه أو أنها يختار دون أن يلاحظ أي سلوك مختلف في النوع.
  • خاصية الأسلوب قد تتطلب ذاكرة إضافية أو العودة إشارة إلى شيء ليس هذا هو في الواقع جزء من الكائن الدولة, حتى تعديل الكائن عاد لا تأثير على الكائن الأصلي;الاستعلام حقل دائما بإرجاع مرجع إلى كائن هو أن يضمن أن تكون جزءا من الكائن الأصلي للدولة.العمل مع المنشأة التي تقوم بإرجاع نسخة يمكن أن يكون مربكا جدا للمطورين, و هذه الخاصية في كثير من الأحيان غير موثقة.

بلدي جافا تجربة ليست عالية سواء ، لذلك أي شخص لا تتردد في تصحيح لي.ولكن AFAIK الاتفاقية العامة لكتابة طريقتين مثل ذلك:

public string getMyString() {
    // return it here
}

public void setMyString(string myString) {
    // set it here
}

إذا كنت تستخدم الكسوف ثم أنه لديه قدرات السيارات توليد جالبة اضع طريقة الداخلية الصفات ، يمكن أن تكون مفيدة و للوقت أداة.

أنا فقط الإفراج عن جافا 5/6 الشروح الشرح المعالج أن يساعد هذا.

تحقق من http://code.google.com/p/javadude/wiki/Annotations

الوثائق هو الضوء قليلا الآن ولكن quickref يجب أن تحصل على فكرة.

في الأساس فإنه يولد الفائقة مع حاصل/واضعي (وغيرها الكثير من الجيل رمز الخيارات).

عينة الطبقة قد تبدو

@Bean(properties = {
    @Property(name="name", bound=true),
    @Property(name="age,type=int.class)
})
public class Person extends PersonGen {
}

هناك العديد من العينات المتوفرة ، وليس هناك أي وقت تبعيات في التعليمات البرمجية التي تم إنشاؤها.

أرسل لي رسالة بالبريد الالكتروني إذا كنت في محاولة منه وتجد أنه من المفيد!-- سكوت

لا توجد خاصية الكلمات الرئيسية في جافا (مثل يمكنك العثور عليها في C#) أقرب طريقة 1 كلمة جالبة/اضع هو أن تفعل في مثل C++:

public class MyClass
{
    private int aMyAttribute;
    public MyClass()
    {
        this.aMyAttribute = 0;
    }
    public void mMyAttribute(int pMyAttributeParameter)
    {
        this.aMyAttribute = pMyAttributeParameter;
    }
    public int mMyAttribute()
    {
        return this.aMyAttribute;
    }
}
//usage :
int vIndex = 1;
MyClass vClass = new MyClass();
vClass.mMyAttribute(vIndex);
vIndex = 0;
vIndex = vClass.mMyAttribute();
// vIndex == 1

كما ذكر سابقا عن الكسوف ، بيئة التطوير المتكاملة (IDE) في كثير من الأحيان يمكن أن تخلق accessor أساليب تلقائيا.

يمكنك أيضا أن تفعل ذلك باستخدام NetBeans.

لخلق أسلوب استرجاع القيمة أساليب الفئة المفتوحة فئة الملف ، ثم انقر بزر الماوس الأيمن فوق أي مكان في محرر التعليمات البرمجية المصدر و اختر أمر القائمة ريفاكتور, تغليف المجالات.يتم فتح مربع حوار.انقر فوق تحديد الكل ثم انقر فوق ريفاكتور.فويلا ،

حظا سعيدا ،

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top