জাভা আমদানির বিবৃতি সহ একটি ওয়াইল্ড কার্ড কেন খারাপ?


419

এটির মতো একক বিবৃতি ব্যবহার করা অনেক বেশি সুবিধাজনক এবং ক্লিনার

import java.awt.*;

একচেটিয়া পৃথক ক্লাস আমদানি করার চেয়ে

import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...

importবিবৃতিতে একটি ওয়াইল্ডকার্ড ব্যবহার করে কী ভুল ?

উত্তর:


518

এটির সাথে একমাত্র সমস্যা হ'ল এটি আপনার স্থানীয় নেমস্পেসকে বিশৃঙ্খলা করে। উদাহরণস্বরূপ, ধরা যাক যে আপনি একটি সুইং অ্যাপ্লিকেশন লিখছেন, এবং তাই প্রয়োজন java.awt.Event, এবং সংস্থার কোম্পানির ক্যালেন্ডারিং সিস্টেমের সাথেও হস্তক্ষেপ করছেন com.mycompany.calendar.Event। আপনি যদি ওয়াইল্ডকার্ড পদ্ধতি ব্যবহার করে উভয়ই আমদানি করেন তবে এই তিনটি জিনিসের মধ্যে একটি ঘটে:

  1. আপনার মধ্যে java.awt.Eventএবং এর মধ্যে একেবারে নামকরণ বিরোধ রয়েছে com.mycompany.calendar.Eventএবং তাই আপনি সংকলন করতেও পারবেন না।
  2. আপনি কেবলমাত্র একটি আমদানি করতে পরিচালনা করেন (আপনার দুটি আমদানির মধ্যে কেবল একটি করে .*) তবে এটি ভুল,
  3. আপনি যখন আপনার কোডটি সংকলন করেন তখন সেখানে নেই com.mycompany.calendar.Event, তবে পরে তারা যখন একটি যুক্ত করে তখন আপনার আগের বৈধ কোডটি হঠাৎ করে সংকলন বন্ধ করে দেয়।

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


7
এটিই হবে প্রথম দৃশ্য। সংকলকটি লক্ষ্য করে যে দুটি ইভেন্ট ক্লাস রয়েছে এবং একটি ত্রুটি দেয়।
jan.vdbergh

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

6
ইস্যু 1 সম্পর্কিত: প্রযুক্তিগতভাবে, আপনি সংকলন করতে পারেন, তবে আপনাকে প্রতিবার সম্পূর্ণ যোগ্য শ্রেণীর নাম ব্যবহার করতে হবে।
কিপ

1
আপনি প্রতিটি শ্রেণিকে সুস্পষ্টভাবে তালিকাভুক্ত না করে এই ধরণের দ্বন্দ্বগুলি সমাধান করতে পারেন, যা এর নিজস্ব সমস্যার কারণ হয়।
rpjohnst

196

তারকা আমদানির জন্য এখানে একটি ভোট । একটি আমদানি বিবৃতি কোনও প্যাকেজ আমদানির উদ্দেশ্যে , কোনও শ্রেণি নয়। এটি সম্পূর্ণ প্যাকেজগুলি আমদানি করতে অনেক ক্লিনার; এখানে চিহ্নিত সমস্যাগুলি (যেমন java.sql.Dateবনাম java.util.Date) সহজেই অন্যান্য উপায়ে প্রতিকার করা হয়, নির্দিষ্ট আমদানির দ্বারা সত্যই সমাধান করা যায় না এবং অবশ্যই অবশ্যই সমস্ত শ্রেণীর মধ্যে উন্মাদভাবে পেডেন্টিক আমদানিকে ন্যায়সঙ্গত করে না। একটি উত্স ফাইল খোলার এবং 100 টি আমদানির বিবরণীর মাধ্যমে পৃষ্ঠাতে থাকা ছাড়া আর কোনরকম উদ্বেগজনক কিছু নেই।

নির্দিষ্ট আমদানি করা রিফ্যাক্টরিংকে আরও কঠিন করে তোলে; আপনি যদি কোনও শ্রেণি অপসারণ / পুনরায় নামকরণ করেন তবে আপনাকে তার নির্দিষ্ট নির্দিষ্ট আমদানি সরিয়ে ফেলতে হবে । আপনি যদি একই প্যাকেজের কোনও পৃথক শ্রেণিতে একটি বাস্তবায়ন পরিবর্তন করেন, আপনাকে আমদানিগুলি ঠিক করতে হবে। এই অতিরিক্ত পদক্ষেপগুলি স্বয়ংক্রিয়ভাবে চালিত হতে পারে তবে এগুলি সত্যই কোনও লাভের জন্য উত্পাদনশীলতা হিট।

এমনকি ডিগ্রি অনুসারে যদি Eclipse ক্লাস আমদানি না করে, তবুও প্রত্যেকে স্টার আমদানি করবে। আমি দুঃখিত, তবে সুনির্দিষ্ট আমদানি করার কোনও যুক্তিসঙ্গত যৌক্তিকতা নেই।

শ্রেণিবদ্ধদের মোকাবেলা করার উপায় এখানে:

import java.sql.*;
import java.util.*;
import java.sql.Date;

28
আমি রাজী. যদিও আমি সুস্পষ্ট আমদানি ব্যবহারের বিরোধিতা করব না, তবুও আমি স্টার আমদানি ব্যবহার করতে পছন্দ করি। তারা জোর দিয়েছিলেন যে "পুনরায় ব্যবহারের একক" সম্পূর্ণ প্যাকেজ, তার স্বতন্ত্র ধরণের নয়। তারকা আমদানির বিরুদ্ধে অন্যরা তালিকাভুক্ত কারণগুলি দুর্বল, এবং আমার অভিজ্ঞতায় তারা স্টার আমদানি ব্যবহার করে কোনও আসল অসুবিধা কখনও ঘটেনি।
রোগারিও

32
এটি কেন খারাপ তা বিশদের জন্য javadude.com/articles/importondemandisevil.html দেখুন । বেসিক ধারণা: এটি আপনার আমদানি করা প্যাকেজগুলিতে ক্লাস যুক্ত হওয়ার পরে কোড সংকলন থামিয়ে দিতে পারে (যেমন তালিকা java.util এ যুক্ত করা হয়েছিল ...)
স্কট স্ট্যানচফিল্ড

61
আপনার উল্লিখিত সমস্ত সমস্যার সমাধান আধুনিক আইডিই (আমদানি গোপন করা, শ্রেণীর নাম, ইত্যাদি ...) দ্বারা সমাধান করা যেতে পারে।
Assylias

15
সোর্স কোডটি পড়তে বা লিখতে আমার কোনও আইডিই ব্যবহার করা উচিত নয় - ভাষাটি অবিশ্বাস্যভাবে ব্রেন্ডেড না করা হলে কোডটি বিশেষ সরঞ্জাম ছাড়া নিজের হাতে পড়া উচিত। এই ক্ষেত্রে, জাভা দুর্দান্ত কাজ করে - কেবল তারকা আমদানি ব্যবহার করুন। না করার কোনও কারণ নেই।
davetron5000

42
@ davetron5000 যদি আপনার কোডটিতে 10+ ওয়াইল্ডকার্ড আমদানি থাকে এবং আপনি ক্লাস ব্যবহার করেন Fooএবং আমি যদি কোনও আইডিই ব্যবহার না করেই আপনার কোডটি পড়ি (যেহেতু আপনার যুক্তিটি হ'ল আমার কোনও ব্যবহার করা উচিত নয়) তবে আমি কীভাবে জানব যে কোন প্যাকেজটি Fooএসেছে? ? অবশ্যই, একটি আইডিই ব্যবহার করে, আইডিই আমাকে বলবে, তবে আপনার সম্পূর্ণ যুক্তিটি হ'ল আমার কোনওটি ছাড়াই কোডটি পড়তে সক্ষম হওয়া উচিত । সুস্পষ্ট আমদানি করা কোডটি দস্তাবেজকে সহায়তা করে (ওয়াইল্ডকার্ডগুলি এড়ানোর দুর্দান্ত কারণ) , এবং এটির অনেক বেশি সম্ভাবনা রয়েছে যে আমি আইডিই ব্যবহার না করেই কোডটি পড়ছি , তার চেয়ে আমি কোনও আইডিই ব্যবহার না করেই কোডটি লিখছি
আন্দ্রেয়াস

169

দয়া করে দেখুন আমার নিবন্ধটি ডিমান্ড এ ডিমান্ড এভিল

সংক্ষেপে, সবচেয়ে বড় সমস্যা হ'ল আপনার আমদানি করা প্যাকেজটিতে কোনও শ্রেণি যুক্ত করা হলে আপনার কোডটি ভেঙে যেতে পারে। উদাহরণ স্বরূপ:

import java.awt.*;
import java.util.*;

// ...

List list;

জাভা 1.1 এ, এটি ঠিক ছিল; তালিকা java.awt এ পাওয়া গেছে এবং কোনও বিরোধ নেই।

এখন ধরা যাক আপনি আপনার পুরোপুরি কার্যকরী কোডটি যাচাই করেছেন এবং এক বছর পরে অন্য কেউ এটি সম্পাদনা করার জন্য এনেছে এবং জাভা 1.2 ব্যবহার করছে।

জাভা ১.২ জাভা.ইটিলে লিস্ট নামের একটি ইন্টারফেস যুক্ত করেছে। গম্ভীর গর্জন! সংঘর্ষ। নিখুঁতভাবে কাজ করার কোডটি আর কাজ করে না।

এটি একটি ইভিল ভাষার বৈশিষ্ট্য। কোনও প্যাকেজে টাইপ যুক্ত হওয়ার কারণে কোডটি সংকলন বন্ধ করা উচিত বলে কোনও কারণ নেই ...

তদতিরিক্ত, আপনি কোন "ফু" ব্যবহার করছেন তা নির্ধারণ করা পাঠকের পক্ষে জটিল করে তোলে


35
এটি কোনও বৈধ অজুহাত নয়। যদি আপনি জাভা সংস্করণ পরিবর্তন করেন তবে আপনি কিছুটা ব্যর্থ হওয়ার প্রত্যাশা করছেন, যদি আপনি আপনার কোড ব্যবহার করে বাইনারিটির সংস্করণ পরিবর্তন করেন। এইসব ক্ষেত্রে কোড একটি কম্পাইল ত্রুটি নিক্ষেপ করা হবে এবং তার সমাধানে তুচ্ছ ব্যাপার (পূর্ববর্তী উত্তর দেখুন: stackoverflow.com/a/149282/7595 )
পাবলো ফার্নান্দেজের

36
@ পাবলো ফার্নান্দেজ - না - যদি আমি এক বছরের জন্য একটি ভান্ডারটিতে থাকা কোডটি পরীক্ষা করে দেখি তবে এটি এখনও সংকলন করা উচিত। আমদানি করা আমদানি বিদ্যমান প্যাকেজগুলিতে নতুন ক্লাস যুক্ত করা হলে আমদানিতে চাহিদা সহজেই ব্যর্থ হয় । জাভা সংস্করণগুলি আপগ্রেড করার সময় এটি কেবল কোনও সমস্যা নয়। এছাড়াও - যদি কোনও এআইপিআই ভালভাবে ডিজাইন করা থাকে তবে এটি আপগ্রেডের বিদ্যমান কোডটি কখনও ভাঙা উচিত নয় । জাভা সংস্করণগুলি আপগ্রেড করার সময় কেবলমাত্র কোডটি পরিবর্তন করার দরকার ছিল কারণ আমদানি অন চাহিদা অনুসারে এবং যখন সান জাভা রানটাইমটিতে এক্সএমএল এপিআইগুলি টানেন।
স্কট স্ট্যাঞ্চফিল্ড

3
ক্লাসপথে কোনও শ্রেণি (একটি অনন্য, পুরোপুরি যোগ্য নাম সহ!) যুক্ত করার ফলে কোনও কিছুই প্রভাবিত হবে না। এখানে মুল বক্তব্যটি হ'ল আপনি যদি আমদানি-অন-ডিমান্ড সিনট্যাক্স ব্যবহার না করেন তবে তা হবে না। সুতরাং ভাষাটি দুর্ভাগ্যক্রমে মঞ্জুরি দেয় এমন খারাপ সিনট্যাক্সটি ব্যবহার করবেন না এবং এটি হ'ল একটি খুব প্রকৃত সমস্যা।
স্কট স্টানচিল্ড

28
আমার উত্তরের বিষয়টি হ'ল এটি একটি অপ্রয়োজনীয় ভাষার বৈশিষ্ট্য যা সমস্যার সৃষ্টি করে। অনেক IDEs / সম্পাদক স্বয়ংক্রিয়ভাবে আমদানি প্রসারণ পরিচালনা করে। পুরোপুরি যোগ্যতাসম্পন্ন আমদানি ব্যবহার করুন এবং এই বিশেষ ত্রুটি হওয়ার কোনও সম্ভাবনা নেই। বিদ্যমান কোডে একটি বাগ ঠিক করার জন্য যখন চাপের মধ্যে ছিলাম তখন আমি এই দ্বারা আক্রান্ত হয়েছি এবং আসল কাজটি হাতছাড়া করার জন্য আপনাকে সত্যিকারের মতো এর দরকার নেই। java.util.Listবনামটি বের java.awt.Listকরা খুব খারাপ নয়, তবে শ্রেণীর নাম Configurationএবং একাধিক নির্ভরতা গ্রন্থাগারগুলি এটি তাদের সর্বশেষতম মেভেন রেপো সংস্করণে যুক্ত করার পরে চেষ্টা করে দেখুন।
স্কট স্টানচিল্ড

5
আমি যদি একটি জার আপডেট করি যেখানে আমি যে ক্লাসগুলি ব্যবহার করি সেগুলি এপিআই-ফরওয়ার্ড সামঞ্জস্যপূর্ণ এবং আমি আমদানি-অন-ডিমান্ড সিনট্যাক্স ব্যবহার করি না, এটি আমার মোটেই প্রভাব ফেলবে না। এটা কি আপনার বোঝার? আমদানি সংজ্ঞা দিতে অলস হবেন না এবং এটি একটি ইস্যু নয়। আমদানি-চাহিদা সিনট্যাক্স জাভা ভাষার সংজ্ঞায় একটি ভুল ছিল; একটি যুক্তিসঙ্গত ভাষা এই জাতীয় ত্রুটিগুলি অনুমতি দেয় না।
স্কট স্ট্যাঞ্চফিল্ড

67

এটা না একটি জাভা আমদানি বক্তব্যের সঙ্গে একটি বন্য কার্ড ব্যবহার করতে খারাপ।

ইন ক্লিন কোড , রবার্ট সি মার্টিন আসলে তাদের ব্যবহার করার পরামর্শ দীর্ঘ আমদানি তালিকা এড়ানো।

সুপারিশটি এখানে:

জে 1: ওয়াইল্ডকার্ড ব্যবহার করে দীর্ঘ আমদানি তালিকা এড়ান

আপনি যদি কোনও প্যাকেজ থেকে দুটি বা ততোধিক ক্লাস ব্যবহার করেন তবে পুরো প্যাকেজটি দিয়ে আমদানি করুন

আমদানি প্যাকেজ। *;

আমদানির দীর্ঘ তালিকা পাঠকদের কাছে হতাশ করছে। আমরা 80 লাইন আমদানি সহ আমাদের মডিউলগুলির শীর্ষগুলি ছড়িয়ে দিতে চাই না। বরং আমরা চাই আমদানিগুলি কী প্যাকেজগুলির সাথে আমরা সহযোগিতা করি সে সম্পর্কে একটি সংক্ষিপ্ত বিবৃতি হোক।

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

কিছু সময় আছে যখন নির্দিষ্ট আমদানির দীর্ঘ তালিকা কার্যকর হতে পারে। উদাহরণস্বরূপ, যদি আপনি লিগ্যাসি কোড নিয়ে কাজ করে থাকেন এবং আপনি কী ক্লাসগুলির জন্য মক এবং স্টাবগুলি তৈরি করতে চান তা জানতে চান তবে আপনি এই সমস্ত শ্রেণীর সত্যিকারের যোগ্য নামগুলি খুঁজে পেতে নির্দিষ্ট আমদানির তালিকায় যেতে পারেন এবং তারপরে লিখতে পারেন জায়গায় উপযুক্ত stubs। যাইহোক, নির্দিষ্ট আমদানির জন্য এই ব্যবহার খুব বিরল। তদুপরি, বেশিরভাগ আধুনিক আইডিই আপনাকে ওয়াইল্ড কার্ডেড আমদানিগুলিকে একক কমান্ডের সাহায্যে নির্দিষ্ট আমদানির তালিকায় রূপান্তর করতে দেয়। সুতরাং এমনকি উত্তরাধিকারের ক্ষেত্রে ওয়াইল্ডকার্ড আমদানি করা আরও ভাল।

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


41
আমি রবার্ট সি মার্টিনকে পরামর্শ দিতে চাই যে আরও সংক্ষিপ্ত প্যাকেজ এবং নিজের ক্লাস তৈরি করতে যাতে 80 লাইন আমদানির প্রয়োজন হয় না তার জন্য আরও ভাল নিদর্শনগুলি ব্যবহার করতে পারেন। একক শ্রেণীর অভ্যন্তরে আমদানির জন্য যে অনেকগুলি শ্রেণীর প্রয়োজনীয়তা রয়েছে তা কেবল 'এনট্রপি, এন্ট্রপি, আমাকে বিরতি দাও ...' ভিক্ষা করে এবং স্কট স্ট্যাঞ্চফিল্ডস অ্যাওয়ার্স
রায়

28
আঙ্কেল বব যা বলতে চাই তা আমি যতটা ভালোবাসি, এক্ষেত্রে আমারও তার সাথে একমত হতে হবে না।

33
আমদানির দীর্ঘ তালিকা পাঠকদের কাছে হতাশ করছে। - এই দাবির একটি অবৈধ অনুমান আছে। প্রোগ্রামারদের উপর থেকে নীচে সোর্স কোডটি পড়ার প্রয়োজন নেই। আমরা আমদানি তালিকা একেবারেই পড়তে পারি না। আমরা যখন করি তখন আমরা কেবলমাত্র একটি আমদানি পড়তে পারি, স্পষ্টতার জন্য। অন্য সময়ে, আমদানিগুলি পুরোপুরি ভেঙে যেতে পারে, যদি আমরা কোনও আইডিইতে কাজ করি। উত্স নির্বিশেষে, আজ এটি এখন খারাপ পরামর্শ।
অ্যান্ডি টমাস

10
এই ইস্যুতে কর্তৃপক্ষের উদ্ধৃতি দেওয়ার সময় কিছুটা পাল্টা ওজন সরবরাহ করার জন্য: গুগল জাভা স্টাইল গাইড পাশাপাশি টুইটারের জাভা স্টাইল গাইড (যা মূলত গুগলের উপর ভিত্তি করে তৈরি করা হয়েছে) বিশেষত ওয়াইল্ডকার্ড আমদানি নিষিদ্ধ করে। তবে তারা এই সিদ্ধান্তের জন্য কোনও যুক্তি সরবরাহ করে না।
17:55 এ 11

1
সম্ভবত একমাত্র পয়েন্টটি আমি ক্লিন কোডে সম্মত হইনি। এটিকে কয়েকটি লাইন আমদানির বিবৃতি দিয়ে স্ক্রোল করতে হচ্ছে বা ক্লাসটি কোথা থেকে আসছে তা সন্ধানে লড়াই করতে হচ্ছে। আমি নির্দিষ্ট শ্রেণি কোথা থেকে আসছে তা সহজেই চিহ্নিত করা পছন্দ করি।
গণেশ সাতপুট

27

পারফরম্যান্স : বাইট কোড হিসাবে পারফরম্যান্সে কোনও প্রভাব নেই। যদিও এটি কিছু সংকেত ওভারহেডের দিকে নিয়ে যাবে।

সংকলন : আমার ব্যক্তিগত মেশিনে, কিছু আমদানি না করে ফাঁকা ক্লাস সংকলন করতে জাভা আমদানি করার সময় ১০০ এমএস তবে একই শ্রেণি লাগে * * 170 এমএস লাগে।


3
import java.*আমদানি কিছুই। কেন এটি একটি পার্থক্য করতে হবে?
লার্নের মার্কুইস

6
এটি পৃথক করে কারণ এটি সংকলনের সময় অনুসন্ধান করা হয় searched
কিংবদন্তি লেন্থথ

25

এটি আপনার নেমস্পেসকে বিশৃঙ্খলাবদ্ধ করে তোলে, আপনাকে দ্বিপাক্ষিক যে কোনও ক্লাসের নাম সম্পূর্ণরূপে নির্দিষ্ট করতে হবে। এর সর্বাধিক সাধারণ ঘটনাটি হ'ল:

import java.util.*;
import java.awt.*;

...
List blah; // Ambiguous, needs to be qualified.

এটি আপনার নির্ভরতাগুলি কংক্রিট করতে সহায়তা করে, কারণ আপনার সমস্ত নির্ভরতা ফাইলের শীর্ষে তালিকাভুক্ত করা হয়।


20
  1. এটি শ্রেণীর নাম বিরোধগুলি সনাক্ত করতে সহায়তা করে: বিভিন্ন প্যাকেজে দুটি নামে একই নাম রয়েছে। এটি * আমদানি দিয়ে মুখোশ দেওয়া যায়।
  2. এটি নির্ভরশীলতাগুলি সুস্পষ্ট করে তোলে, যাতে আপনার কোডটি পরে পড়তে হয় এমন কেউ জানতে পারে যে আপনি কী আমদানি করছেন এবং আপনি কী আমদানি করতে চাইছেন না।
  3. এটি কিছু সংকলন দ্রুত তৈরি করতে পারে কারণ সংকলকটিকে অবনতিগুলি সনাক্ত করতে পুরো প্যাকেজটি অনুসন্ধান করতে হবে না, যদিও এটি আধুনিক সংকলকগুলির সাথে সাধারণত কোনও বিশাল চুক্তি নয়।
  4. সুস্পষ্ট আমদানির অসুবিধাগুলি আধুনিক আইডিইগুলির সাথে হ্রাস করা হয়। বেশিরভাগ আইডিই আপনাকে আমদানি বিভাগটি ভেঙে ফেলার অনুমতি দেয় যাতে এটি কোনওভাবে হয় না, প্রয়োজনের সময় স্বয়ংক্রিয়ভাবে আমদানিগুলি آباد করে এবং সেগুলি পরিষ্কার করতে সহায়তার জন্য অব্যবহৃত আমদানি সনাক্ত করে।

বেশিরভাগ জায়গাতেই আমি কাজ করেছি যা কোনও উল্লেখযোগ্য পরিমাণ জাভা ব্যবহার করে সুস্পষ্ট আমদানি কোডিং স্ট্যান্ডার্ডের অংশ করে তোলে। কোডটি উত্পাদনের সময় আমি মাঝে মাঝে ততক্ষণে দ্রুত প্রোটোটাইপিংয়ের জন্য * ব্যবহার করি এবং তারপরে আমদানি তালিকাগুলি প্রসারিত করি (কিছু আইডিই আপনার জন্য এটিও করবে)।


আমি আপনার বেশিরভাগ পয়েন্ট পছন্দ করি তবে এটি বিশেষত # 4 ছিল যা আমাকে আপনার উত্তরটিকে উজ্জীবিত করতে পেরেছিল। আধুনিক আইডিইগুলি সুস্পষ্ট আমদানি ব্যবহারের বিরুদ্ধে বেশিরভাগ যুক্তি সরিয়ে দেয় ...
শেল্ডন আর।

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

11

আমি নির্দিষ্ট আমদানি পছন্দ করি, কারণ এটি আমার পুরো ফাইলটি না দেখেই ফাইলটিতে ব্যবহৃত সমস্ত বাহ্যিক উল্লেখগুলি দেখতে দেয় to (হ্যাঁ, আমি জানি এটি অগত্যা পুরোপুরি যোগ্যতাসম্পন্ন রেফারেন্সগুলি দেখায় না But তবে আমি যখনই সম্ভব এগুলি এড়িয়ে চলে))


9

পূর্ববর্তী একটি প্রকল্পে আমি দেখতে পেয়েছিলাম যে * - আমদানি থেকে নির্দিষ্ট আমদানিতে পরিবর্তন সংকলনের সময়টিকে অর্ধেক (প্রায় 10 মিনিট থেকে প্রায় 5 মিনিটে) হ্রাস করে। * -Import আপনার ব্যবহৃত একটির সাথে ক্লাসের জন্য তালিকাভুক্ত প্রতিটি প্যাকেজ সংকলক অনুসন্ধান করে। যদিও এই সময়টি ছোট হতে পারে, এটি বড় প্রকল্পগুলির জন্য যোগ করে।

* -Import এর একটি পার্শ্ব প্রতিক্রিয়া ছিল হ'ল ডেভেলপাররা সাধারণ কী আমদানি লাইনগুলি তাদের প্রয়োজন তা ভেবে কপি এবং পেস্ট করবে।


11
এটি সত্য হওয়ার জন্য অবশ্যই প্রচুর আমদানি লাইন বা সত্যিকারের করুণ বিকাশ ব্যবস্থা থাকতে হবে। আমি আমদানি ব্যবহার করি - * একটি আমি আমার পুরো কোডবেসটি 2 মিনিটের মধ্যে 2107 ক্লাসের সংকলন করতে পারি ।
লরেন্স ডল

6

ইন DDD বই

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

এবং যদি এটি স্থানীয় নামফলকে বিশৃঙ্খলা করে তবে এটি আপনার দোষ নয় - প্যাকেজের আকারটিকে দোষ দিন।


3
  • কোনও রানটাইম প্রভাব নেই, কারণ সংকলক স্বয়ংক্রিয়ভাবে * কে কংক্রিট শ্রেণীর নামের সাথে প্রতিস্থাপন করে। আপনি .class ফাইলটি ডিসম্পাইল করে ফেললে আপনি কখনই দেখতে পাবেন না import ...*

  • সি # সর্বদা * ব্যবহার করে (অন্তর্নিহিত) কারণ আপনি কেবল usingপ্যাকেজ নাম রাখতে পারেন। আপনি কখনই শ্রেণীর নাম নির্দিষ্ট করতে পারবেন না। জাভা সি # এর পরে বৈশিষ্ট্যটি প্রবর্তন করে। (জাভা অনেক দিক থেকে জটিল, তবে এটি এই বিষয়টির বাইরে)।

  • ইন্টেলিজ আইডিয়ায় আপনি যখন "আমদানি সংগঠিত" করেন, এটি স্বয়ংক্রিয়ভাবে একই প্যাকেজের একাধিক আমদানিকে * এর সাথে প্রতিস্থাপন করে। আপনি এটি বন্ধ করতে না পারার কারণে এটি একটি বাধ্যতামূলক বৈশিষ্ট্য (যদিও আপনি প্রান্তিক বৃদ্ধি করতে পারেন)।

  • গৃহীত উত্তর দ্বারা তালিকাভুক্ত মামলাটি বৈধ নয়। * ছাড়া আপনি এখনও একই সমস্যা পেয়েছেন। আপনি আপনার কোডটিতে প্যাকেজের নামটি নির্দিষ্ট করতে হবে আপনি যা ব্যবহার করেন না * তা ব্যবহার করুন।


1
ইন্টেলিজজে এটি কোনও বাধ্যতামূলক বৈশিষ্ট্য নয় এবং এটি বন্ধ করা যেতে পারে।
বাসটিয়েন

3

রেকর্ডের জন্য: আপনি যখন কোনও আমদানি যুক্ত করবেন, আপনি নিজের নির্ভরতাও ইঙ্গিত করছেন।

আপনি ফাইলগুলির নির্ভরতা কী তা দ্রুত দেখতে পেলেন (একই নেমস্পেসের ক্লাসগুলি বাদ দিয়ে)।


একমত। অনুপ্রেরণাকারী এতটা কার্য সম্পাদন বা সংকলন নয়, তবে আপনার কোডটির মানব পাঠযোগ্যতা ability উদাহরণস্বরূপ, গিটহাব-এ আপনি কোনও আইডিই ছাড়াই কোড পড়ছেন তা কল্পনা করুন। হঠাৎ আপনি যে ফাইলটি পড়ছেন তাতে সংজ্ঞায়িত প্রতিটি রেফারেন্স সন্ধান করে মন-অজ্ঞান হয়ে ওঠে ক্লান্তিকর।
লিও ওরিয়েন্টিস

2

সর্বাধিক গুরুত্বপূর্ণটি হ'ল আমদানি করা java.awt.*আপনার প্রোগ্রামকে ভবিষ্যতের জাভা সংস্করণের সাথে বেমানান করতে পারে:

মনে করুন আপনার "ABC" নামে একটি শ্রেণি রয়েছে, আপনি জেডিকে 8 ব্যবহার করছেন এবং আপনি আমদানি করেন java.util.*। এখন, ধরুন যে জাভা 9 বেরিয়ে এসেছে এবং এটির প্যাকেজে একটি নতুন ক্লাস রয়েছে java.utilযা কাকতালীয়ভাবে "এবিসি" নামে পরিচিত। আপনার প্রোগ্রামটি এখন জাভা 9 তে সংকলন করবে না, কারণ সংকলক জানেন না যে "এবিসি" নামের সাথে আপনি নিজের শ্রেণি বা নতুন ক্লাসটি বোঝাচ্ছেনjava.awt

আপনি কেবল সেই ক্লাসগুলি স্পষ্টভাবে আমদানি করলে আপনার সমস্যা হবে না java.awt

সম্পদ:

জাভা আমদানি


3
টিপ: আপনি Streamজাভাতে জাভাতে যোগ করা নতুন ক্লাসের উদাহরণ হিসাবে জাভা 8 ব্যবহার করতে পারবেন ...
ক্লিন্ট ইস্টউড

2

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


যদি পারবেন যা তার পূর্ণ লজিক্যাল উপসংহার তারপর আপনার শৈলী সব সময়ে আমদানির এবং "নতুন LinkedList" এর পরিবর্তে ব্যবহার করবেন উচিত সবসময় "নতুন java.util.LinkedList" ব্যবহার এবং এই ধারাবাহিকভাবে না সর্বত্র
এরউইন স্মাউট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.