উত্তর:
না, জাভা ব্যবহারকারী-সংজ্ঞায়িত অপারেটর ওভারলোডিং সমর্থন করে না। জাভাটির একমাত্র দিক যা "কাস্টম" অপারেটর ওভারলোডিংয়ের কাছাকাছি আসে স্ট্রিংগুলির জন্য + এর হ্যান্ডলিং, যার ফলে স্ট্রিংবিল্ডার / স্ট্রিংবফার ব্যবহার করে ধ্রুবকগুলিকে সংকলন-সময় কনকনেটেশন বা এক্সিকিউশন-সময় কনকনেটেশন প্রদান করা হয়। আপনি নিজের অপারেটরগুলি সংজ্ঞায়িত করতে পারবেন না যারা একইভাবে কাজ করে।
জাভা-জাতীয় (এবং জেভিএম ভিত্তিক) ভাষার জন্য যা অপারেটর ওভারলোডিং সমর্থন করে , আপনি কোটলিন বা গ্রোভির দিকে নজর দিতে পারেন । বিকল্পভাবে, আপনি একটি জাভা সংকলক প্লাগইন সমাধানের সাথে ভাগ্য পেতে পারেন ।
BigInteger
জাভা, তারপর ব্যবহার অনুরূপ কোড তাকান BigInteger
C # অপারেটার ব্যবহার করে। প্রতিনিধিরা কীভাবে ওওপি নীতিগুলি ভেঙে দেয় তা আমি দেখতে পাচ্ছি না - আপনার আপত্তিগুলির তুলনায় আপনাকে আরও বেশি সুনির্দিষ্ট হওয়া দরকার। জাভা ডিজাইনাররা কেন বিভিন্ন বৈশিষ্ট্য অন্তর্ভুক্ত করেননি তার বিবরণ আমি জানি না, তবে আমার সন্দেহ হয় যে সংস্থানটির চাপের মিশ্রণ রয়েছে এবং ভাষাটি ছোট এবং তুলনামূলকভাবে সহজ রাখার আকাঙ্ক্ষা রয়েছে।
m0
হিসেবে Matrix
এবং v0
, v1
, v2
, v3
, এবং v4
যেমন Vector
S, কেবল তুলনা কতদিন এটা আপনি লাগে সঠিকভাবে নিম্নলিখিত গাণিতিক অভিব্যক্তি ব্যাখ্যা m0.transpose().mult(v0.add(v1.mult(v2)).cross(v3)).sub(v4);
। অপারেটর ওভারলোডিংয়ের জন্য সমর্থনটি অন্তর্ভুক্ত করা থাকলে এটি লেখা যেতে পারে m0.transpose() * (v0 + v1 * v2).cross(v3) - v4;
।
জাভা অপারেটরকে ওভারলোডিংয়ের অনুমতি দেয় না। পছন্দের পদ্ধতির ক্রিয়াটি সম্পাদন করার জন্য আপনার ক্লাসে একটি পদ্ধতি নির্ধারণ করা: a.add(b)
পরিবর্তে a + b
। আপনি এখানে জাভা সি থেকে সিলেকৃত অন্যান্য বিটের সংক্ষিপ্তসার দেখতে পাবেন: বৈশিষ্ট্যগুলি সি এবং সি ++ থেকে সরানো হয়েছে
আপনি নিজে এটি করতে পারবেন না যেহেতু জাভা অপারেটর ওভারলোডিংয়ের অনুমতি দেয় না।
সঙ্গে এক ব্যতিক্রম অবশ্য। স্ট্রিং অবজেক্টের জন্য + এবং + = ওভারলোড করা হয়।
&
, |
এবং ^
জন্য জমিদার হয় boolean
এবং অবিচ্ছেদ্য ধরনের। এবং প্রকৃতপক্ষে, গাণিতিক এবং রিলেশনাল অপারেটরগুলি বিভিন্ন সংখ্যার ধরণের জন্য ওভারলোড হয়। (অবশ্যই, ওভারলোডগুলির শব্দার্থকতা আরও কাছাকাছি ...)
আরও অনেকে উত্তর দিয়েছেন: জাভা ব্যবহারকারী-সংজ্ঞায়িত অপারেটর ওভারলোডিং সমর্থন করে না।
হতে পারে এটি অফ-টপিক, তবে আমি কিছু উত্তরে যা কিছু পড়েছি তার বিষয়ে মন্তব্য করতে চাই।
পাঠযোগ্যতা সম্পর্কে।
তুলনা করা:
আবার দেখ!
কোনটি বেশি পাঠযোগ্য?
একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যা ব্যবহারকারী-সংজ্ঞায়িত প্রকারের তৈরি করতে দেয়, তাদের অন্তর্নির্মিত প্রকারের (বা আদিম ধরণের) মতো কাজ করার অনুমতি দেওয়া উচিত।
সুতরাং জাভা জেনেরিক প্রোগ্রামিংয়ের একটি মৌলিক নীতি ভঙ্গ করে:
আমাদের ব্যবহারকারীর দ্বারা সংজ্ঞায়িত প্রকারের অবজেক্টগুলির সাথে অন্তর্নির্মিত ধরণের অবজেক্টগুলিকে আদান প্রদান করতে সক্ষম হওয়া উচিত।
(আপনি ভাবতে পারেন: "তিনি কি 'বিল্ট-ইন অবজেক্টস' বলেছিলেন?"। হ্যাঁ, এখানে দেখুন ))
স্ট্রিং সংক্ষিপ্তকরণ সম্পর্কে:
গণিতবিদরা সেটগুলিতে কম্যেটেটিভ ক্রিয়াকলাপের জন্য + চিহ্নটি ব্যবহার করেন।
সুতরাং আমরা নিশ্চিত হতে পারি যে a + b = b + a।
স্ট্রিং কনকনেটেশন (বেশিরভাগ প্রোগ্রামিং ভাষায়) এই সাধারণ গাণিতিক স্বরলিপিটিকে সম্মান করে না।
a := "hello"; b := "world"; c := (a + b = b + a);
বা জাভাতে:
String a = "hello"; String b = "world"; boolean c = (a + b).equals(b + a);
অতিরিক্ত:
লক্ষ্য করুন যে জাভাতে কীভাবে সাম্যতা এবং পরিচয় বিভ্রান্ত হয়। == (সাম্য) প্রতীকটির অর্থ:
ক। আদিম ধরণের জন্য সমতা।
খ। ব্যবহারকারী-সংজ্ঞায়িত প্রকারের জন্য পরিচয়-পরীক্ষা, অতএব, আমরা সমতা জন্য ফাংশন সমান () ব্যবহার করতে বাধ্য হই ।
তবে ... অপারেটর ওভারলোডিংয়ের সাথে এর কী আছে?
ভাষা যদি অপারেটরকে ওভারলোডিং ব্যবহারকারীর অনুমতি দেয় তবে ব্যবহারকারী সাম্যতা অপারেটরের যথাযথ অর্থ দিতে পারে।
==
সি এবং সি ++ এর মতো জাভাতেও সমতার জন্য প্রতীকটি ব্যবহৃত হয়। অপারেটর ওভারলোডিংয়ের সাথে এর কোনও যোগসূত্র নেই।
কেউ জাভা অপারেটর ওভারলোডিং চেষ্টা করতে পারেন । এটির নিজস্ব সীমাবদ্ধতা রয়েছে তবে আপনি যদি সত্যই অপারেটর ওভারলোডিং ব্যবহার করতে চান তবে এটি চেষ্টা করে দেখার মতো।
আপনার জাভা কোডের সাথে কেবল এক্সট্যান্ড ব্যবহার করুন। এটি অপারেটর ওভারলোডিং সমর্থন করে:
package com.example;
@SuppressWarnings("all")
public class Test {
protected int wrapped;
public Test(final int value) {
this.wrapped = value;
}
public int operator_plus(final Test e2) {
return (this.wrapped + e2.wrapped);
}
}
package com.example
class Test2 {
new() {
val t1 = new Test(3)
val t2 = new Test(5)
val t3 = t1 + t2
}
}
অফিসিয়াল ওয়েবসাইটে, প্রতিটি অপারেটরের জন্য প্রয়োগের পদ্ধতিগুলির একটি তালিকা রয়েছে!
অথবা, আপনি জাভা গ্রোভি তৈরি করতে পারেন এবং যা চান তা অর্জন করতে এই ফাংশনগুলিকে কেবল ওভারলোড করতে পারেন
//plus() => for the + operator
//multiply() => for the * operator
//leftShift() = for the << operator
// ... and so on ...
class Fish {
def leftShift(Fish fish) {
print "You just << (left shifted) some fish "
}
}
def fish = new Fish()
def fish2 = new Fish()
fish << fish2
কারা গ্রোভি হতে / ব্যবহার করতে চান না? : ডি
না আপনি জাভাতে সংকলিত গ্রোভি জারগুলি একইভাবে ব্যবহার করতে পারবেন না। এটি এখনও জাভার জন্য একটি সংকলক ত্রুটি।
সি ++ এর বিপরীতে, জাভা ব্যবহারকারী সংজ্ঞায়িত অপারেটর ওভারলোডিং সমর্থন করে না। জাভাতে ওভারলোডিং অভ্যন্তরীণভাবে করা হয়।
+
উদাহরণস্বরূপ আমরা (প্লাস) নিতে পারি :
int a = 2 + 4;
string = "hello" + "world";
এখানে, দুটি আরও পূর্ণসংখ্যার সংখ্যা যুক্ত করে এবং দুটি স্ট্রিং সংযুক্ত করে। সুতরাং আমরা বলতে পারি যে জাভা অভ্যন্তরীণ অপারেটর ওভারলোডিং সমর্থন করে তবে ব্যবহারকারী সংজ্ঞায়িত নয়।