অপারেটর '+' অবজেক্ট এবং স্ট্রিংয়ে প্রয়োগ করা যাবে না


12

নিম্নলিখিত কোড:

void someMethod(Object value)
{
    String suffix = getSuffix();
    if (suffix != null)
        value += suffix;

    [...]
}

JDK 8 এ ত্রুটি ছাড়াই সংকলন করে (-Source 1.6 ব্যবহার করে), তবে ত্রুটি বার্তায় জেডিকে 6 এ ব্যর্থ হয়:

Operator '+' cannot be applied to java.lang.Object and java.lang.String

আমি কীভাবে ত্রুটিটি সম্পর্কে বুঝতে পারি না কেন, এইটি জেডিকে 8 এর সাথে সংকলন করে? এই কোথাও নথিভুক্ত করা হয়?


আমার ধারণা মানটি স্ট্রিংয়ের মতো হবে না। মানটি যদি একটি পূর্ণসংখ্যা হয় তবে আমি এর সাথে একটি স্ট্রিং যুক্ত করতে বুদ্ধিমান করব না। মাইয়ে আপনি স্ট্রিংয়ের জন্য মূল্য কাস্ট করার চেষ্টা করতে পারেন
fedoraHacker

2
@ ফেডোরাহ্যাকার value = value + suffixমূল্যের ধরণ নির্বিশেষে অভিব্যক্তিটি সম্পূর্ণ আইনি। সুতরাং এটি আমার value += suffixকাছে আইনী হওয়া উচিত বলে মনে হয় ।
গ্রোড্রিগেজ

বাহ, আমার কোনও ধারণা ছিল না আমি ভেবেছিলাম যে বিভিন্ন বস্তুর পুরো বিষয়টি হ'ল ডেটা কী করতে পারে এবং কী করতে পারে না তার নিয়ম নির্ধারণ করা to বিভিন্ন ডেটাটাইপ এবং অবজেক্ট থাকার পুরো বিষয়টি হ'ল ধরণগুলি এক কাজ করে তা নিশ্চিত করার জন্য পৃথক করে দেওয়া দায়িত্ব, তবে এটি ভালভাবে করে। আমি কেবল বিস্মিত হয়েছি যে আপনি এর মতো ডেটাটাইপগুলি মিশ্রিত করতে পারেন। ভাল আপনি প্রতিদিন কিছু শিখেন :) এবং মান = মান + প্রত্যয় হ'ল মান + = প্রত্যয় হিসাবে একই, সুতরাং আমি
বাক্যটিকে মোটেও

1
হ্যাঁ তবে স্ট্রিং টাইপটি কিছুটা বিশেষ। এখানে + অপারেটরটি হ'ল "স্ট্রিং কনট্যাকটেশন অপারেটর"; যদি অপারেন্ডগুলির মধ্যে কেবল একটি স্ট্রিং হয় তবে বাকীটি মূল্যায়নের আগে অন্যটি স্ট্রেনে রূপান্তরিত হয়। জেএলএস এর এই বিভাগটি দেখুন ।
গ্রোড্রিগেজ

আমি দেখছি, স্ট্রিং এটিকে এমন রূপান্তরিত করতে পারে না। প্রশ্নের উত্তর দেওয়ার পরেও সময় দেওয়ার জন্য ধন্যবাদ!
fedoraHacker

উত্তর:


16

জেএলএস 15.26.2। যৌগিক বরাদ্দ অপারেটররা বলেছেন:

ফর্ম একটি যৌগ নিয়োগ অভিব্যক্তি E1 op= E2সমতূল্য E1 = (T) ((E1) op (E2)), যেখানে Tপ্রকার E1, যে ব্যতীত E1শুধুমাত্র একবার মূল্যায়ন করা হয়।

সেই বাক্যটি জাভা 6 থেকে জাভা 14- তে সমান এবং জাভা শুরু হওয়ার পরে সম্ভবত কখনও পরিবর্তন হয়নি।

তাই value += suffixহিসাবে একইvalue = (Object) (value + suffix)

জাভা 6 সংকলক যে বিবৃতিটি সংকলন করতে ব্যর্থ হওয়া উচিত ছিল না।


2
জেডিকে (জাভাক) বাগ তখন। জেএলএস-এর পয়েন্টারের জন্য আপনাকে ধন্যবাদ, একরকম আমি এটি মিস করেছি।
গ্রোড্রিগেজ

3
15.18.1। স্ট্রিং কনক্যাটেনেশন অপারেটর + এর সমতুল্য বিবরণটিvalue = (Object) (value + suffix) সংকলন করা উচিত কেন তা ব্যাখ্যা করার জন্যও প্রাসঙ্গিক ।
ডিউক্লিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.