জাভাতে ইন্টারফেস এবং @ ইন্টারফেসের মধ্যে পার্থক্য কী?


306

বিশ্ববিদ্যালয়ে থাকাকালীন নব্বইয়ের দশকের শেষভাগে জেবিল্ডার ব্যবহার করার পরে আমি জাভা স্পর্শ করিনি, তাই আমি এই স্পর্শ থেকে একটু দূরে আছি - যে কোনও হারেই আমি এই সপ্তাহে একটি ছোট জাভা প্রকল্পে কাজ করছি এবং আমার আইডিই হিসাবে ইন্টেলিজ আইডিইএ ব্যবহার করছি , আমার নিয়মিত থেকে গতির পরিবর্তনের জন্য। নেট বিকাশ।

আমি লক্ষ্য করেছি যে এটির ইন্টারফেস এবং @ অভ্যন্তরীণ পৃষ্ঠাগুলি যুক্ত করার জন্য সমর্থন রয়েছে, একটি @ ইন্টারফেস কী, এবং এটি একটি সাধারণ ইন্টারফেস থেকে কীভাবে আলাদা হয়?

public interface Test {
}

বনাম

public @interface Test {
}

আমি কিছুটা অনুসন্ধান করেছি, তবে @ ইন্টারফেসটিকে উল্লেখ করে দরকারী দরকারী তথ্য খুঁজে পাচ্ছি না।

উত্তর:


322

@ প্রতীক একটি টীকা টাইপ সংজ্ঞা উল্লেখ করে।

এর মানে হল যে এটা না সত্যিই একটি ইন্টারফেস, বরং একটি নতুন টীকা টাইপ - যেমন একটি ফাংশন পরিবর্তক হিসেবে ব্যবহার করার @override

বিষয়টিতে এই জাভাদোকস এন্ট্রি দেখুন ।


7
দারুণ ধন্যবাদ, জেনে ভাল। সুতরাং এটিকে @ অভ্যন্তরীণ পৃষ্ঠ বলার যৌক্তিকতা কী ছিল, তারপরে @ নোটেশনটি অবাক করে বলুন .. মনে হয় অযথা অতিরিক্ত বোঝা শব্দ।
বিটারকোডার

5
টিউটোরিয়াল এবং জেএলএস একটি বিশেষ ধরণের ইন্টারফেস হিসাবে একটি টীকাটিকে বোঝায়। বিষয়টি নিয়ে সেখানে খুব বেশি আলোচনা হতে পারে না, তবে javarunner.blogspot.com/2005/01/annotations-in-java-15.html ব্যাখ্যা করে যে টিকাগুলি এনটেশন ইন্টারফেস এবং @ এবং ইন্টারফেসের অন্তর্নিহিত এক্সটেনশন are নিয়মিত ইন্টারফেস থেকে পৃথক করতে একসাথে ব্যবহৃত হয়। আপনি টীকাগুলির জন্য জেএসআর স্পেসিফিকেশনটি পড়তে চাইতে পারেন।
ডেভিডভ্যালারি

1
@ বিটারকোডার দস্তাবেজগুলি উল্লেখ করে: "কীওয়ার্ড ইন্টারফেসটি পূর্ববর্তী চিহ্ন (@) (@ = এটি, টীকা লেখার ধরণ অনুসারে) হয়"। আমি যুক্তিযুক্ত নামটি খুঁজে পেতে পারি এমন যুক্তিযুক্ত বিষয়গুলি।
শৈশব

111

ইন্টারফেস:

সাধারণভাবে, একটি ইন্টারফেস অন্তর্নিহিত বাস্তবায়ন বিশদটি প্রকাশ না করেই একটি চুক্তি প্রকাশ করে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে, ইন্টারফেসগুলি বিমূর্ত প্রকারগুলি সংজ্ঞায়িত করে যা আচরণ প্রকাশ করে, কিন্তু এতে কোনও যুক্তি থাকে না। বাস্তবায়ন ক্লাস বা টাইপ দ্বারা সংজ্ঞায়িত করা হয় যা ইন্টারফেস প্রয়োগ করে।

@ আন্তঃফেস: (টীকাগুলির ধরণ)

নীচের উদাহরণটি ধরুন, এতে প্রচুর মন্তব্য রয়েছে:

public class Generation3List extends Generation2List {

   // Author: John Doe
   // Date: 3/17/2002
   // Current revision: 6
   // Last modified: 4/12/2004
   // By: Jane Doe
   // Reviewers: Alice, Bill, Cindy

   // class code goes here

}

এর পরিবর্তে, আপনি একটি টীকা প্রকার ঘোষণা করতে পারেন

 @interface ClassPreamble {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
   // Note use of array
   String[] reviewers();
}

যা এরপরে নিম্নরূপ কোনও শ্রেণীর বেনিফিট করতে পারে:

@ClassPreamble (
   author = "John Doe",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "Jane Doe",
   // Note array notation
   reviewers = {"Alice", "Bob", "Cindy"}
)
public class Generation3List extends Generation2List {

// class code goes here

}

পিএস: অনেক টিকা মন্তব্যগুলিতে মন্তব্যে প্রতিস্থাপন করে।

তথ্যসূত্র: http://docs.oracle.com/javase/tutorial/java/annotations/declaring.html


11
সুন্দর ব্যাখ্যা
প্যাট বি

2
আসলে এটি দরকারী ছিল। আমি জানতাম না জাভা এটি করতে পারে।
জে সিড্রি

পূর্ববর্তী উত্তরে এই লিঙ্কটি অন্তর্ভুক্ত ছিল যা থেকে এই তথ্যটি এসেছে। আমি এই বিষয় সম্পর্কে আরও তথ্য খুঁজে পেতে দরকারী বলে মনে করি। docs.oracle.com/javase/tutorial/java/annotations/declaring.html
প্যাটস

1
সেরা এবং পূর্ণ উত্তরগুলির মধ্যে একটি (এখনও পরিষ্কার) আমি স্ট্যাকওভারফ্লোতে সাক্ষ্য দিচ্ছি।
মিঃ ডি

32

interfaceশব্দ ইঙ্গিত করছে যে জাভা একটি ঐতিহ্যগত ইন্টারফেসের বর্গ ঘোষণা করা হয়।
মূল @interfaceশব্দটি একটি নতুন টীকা ঘোষণার জন্য ব্যবহৃত হয়।

সিনট্যাক্সের বর্ণনার জন্য টীকাগুলিতে ডকস.ওরাকল টিউটোরিয়াল দেখুন ।
আপনি যদি সত্যিকার অর্থে এর অর্থ বিশদ পেতে চান তবে জেএলএস দেখুন @interface


18

interface: কোনও শ্রেণীর জন্য চুক্তি সংজ্ঞা দেয় যা এটি প্রয়োগ করে

@interface: টীকাগুলির জন্য চুক্তিটি সংজ্ঞায়িত করে


8

জাভা প্রোগ্রামিং ভাষার ইন্টারফেস একটি বিমূর্ত প্রকার যা ক্লাসগুলি প্রয়োগ করতে হবে এমন আচরণ নির্দিষ্ট করতে ব্যবহৃত হয় specify এগুলি প্রোটোকলের মতো। ইন্টারফেস ইন্টারফেস কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়

@ ইন্টারফেস আপনার নিজের (কাস্টম) জাভা টিকা তৈরি করতে ব্যবহৃত হয়। টীকাগুলি জাভা ক্লাস বা ইন্টারফেসের মতো তাদের নিজস্ব ফাইলে সংজ্ঞায়িত করা হয়। এখানে কাস্টম জাভা টীকা দেওয়ার উদাহরণ:

@interface MyAnnotation {

    String   value();

    String   name();
    int      age();
    String[] newNames();

}

এই উদাহরণটি MyAnnotation নামক একটি টীকা সংজ্ঞা দেয় যার মধ্যে চারটি উপাদান রয়েছে। @ ইন্টারফেস কীওয়ার্ডটি লক্ষ্য করুন। এটি জাভা সংকলককে ইঙ্গিত দেয় যে এটি একটি জাভা টীকা সংজ্ঞা।

লক্ষ্য করুন যে প্রতিটি উপাদান একটি ইন্টারফেসে একটি পদ্ধতি সংজ্ঞা অনুরূপ সংজ্ঞায়িত করা হয়। এটিতে একটি ডেটা টাইপ এবং একটি নাম রয়েছে। আপনি মৌলিক ডেটা ধরণের হিসাবে সমস্ত আদিম ডেটা ধরণের ব্যবহার করতে পারেন। আপনি ডেটার ধরণ হিসাবে অ্যারে ব্যবহার করতে পারেন। আপনি জটিল ধরণের ডেটা টাইপ হিসাবে ব্যবহার করতে পারবেন না।

উপরের টীকাটি ব্যবহার করতে, আপনি এই জাতীয় কোড ব্যবহার করতে পারেন:

@MyAnnotation(
    value="123",
    name="Jakob",
    age=37,
    newNames={"Jenkov", "Peterson"}
)
public class MyClass {


}

তথ্যসূত্র - http://tutorials.jenkov.com/java/annotations.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.