java - রহম - জাভা প্রোগ্রামিং শেখার বাংলা বই pdf




জাভা টীকা সদস্যদের জন্য কি ধরনের ব্যবহার করা যেতে পারে? (3)

আজ আমি এই ডকুমেন্টেশন অনুসরণ করে আমার প্রথম টীকা ইন্টারফেস তৈরি করতে চেয়েছিলাম এবং আমি কম্পাইলার ত্রুটি পেয়েছিলাম

Invalid type for annotation member":
public @interface MyAnnotation {
    Object myParameter;
    ^^^^^^
}

স্পষ্টতই Object একটি টীকা সদস্য হিসাবে ব্যবহার করা যাবে না। দুর্ভাগ্যবশত আমি কোন ধরনের তথ্য সাধারণভাবে ব্যবহার করতে পারি তা খুঁজে পাইনি।

এই আমি ট্রায়াল এবং ত্রুটি ব্যবহার করে খুঁজে পাওয়া যায় নি:

  • String → বৈধ
  • int → বৈধ
  • Integer → অবৈধ (বিস্ময়করভাবে)
  • String[] → বৈধ (বিস্ময়করভাবে)
  • Object → অবৈধ

সম্ভবত কোন ধরনের আসলে কোন অনুমতি দেওয়া হয় এবং কোন কারণে কিছু হালকা চালাতে পারেন।


আমি উপলব্ধ ধরনের জন্য Skaffman সঙ্গে একমত।

অতিরিক্ত সীমাবদ্ধতা: এটি একটি কম্পাইল-সময় ধ্রুবক হতে হবে

উদাহরণস্বরূপ, নিম্নলিখিত নিষিদ্ধ করা হয়:

@MyAnnot("a" + myConstantStringMethod())
@MyAnnot(1 + myConstantIntMethod())

এছাড়াও যে annotations নিজেদের একটি টীকা সংজ্ঞা অংশ হতে পারে ভুলবেন না। এটি কিছু সহজ টীকা নেস্টিংয়ের অনুমতি দেয় - আপনি যেখানে একবার একটি টীকা উপস্থাপনা করতে চান সেক্ষেত্রে সহজ।

উদাহরণ স্বরূপ:

@ComplexAnnotation({
    @SimpleAnnotation(a="...", b=3),
    @SimpleAnnotation(a="...", b=3),
    @SimpleAnnotation(a="...", b=3)
})
public Object foo() {...}

যেখানে SimpleAnnotation হয়

@Target(ElementType.METHOD)
public @interface SimpleAnnotation {
    public String a();
    public int b();
)

এবং ComplexAnnotation হয়

@Target(ElementType.METHOD)
public @interface ComplexAnnotation {
    public SimpleAnnotation[] value() default {};
)

থেকে নেওয়া উদাহরণ: https://blogs.oracle.com/toddfast/entry/creating_nested_complex_java_annotations


টীকাগুলির ধারণাটি আমার প্রোজেক্টের ডিজাইনের সাথে সত্যিই ভালভাবে ফিট করে, যতক্ষণ না আমি বুঝতে পারি যে আপনার টীকাটিতে জটিল ডেটাপ্যাপগুলি থাকতে পারে না। আমি ক্লাসের একটি তাত্ক্ষণিক বস্তুর পরিবর্তে তাত্ক্ষণিকভাবে কী চাই তা ব্যবহার করে এটির চারপাশে এসেছি। এটা নিখুঁত নয়, কিন্তু জাভা খুব কমই হয়।

@interface Decorated { Class<? extends PropertyDecorator> decorator() }

interface PropertyDecorator { String decorate(String value) }

class TitleCaseDecorator implements PropertyDecorator {
    String decorate(String value)
}

class Person {
    @Decorated(decorator = TitleCaseDecorator.class)
    String name
}






annotations