ডিফল্ট-প্যাকেজে জাভা-ক্লাসগুলি কীভাবে অ্যাক্সেস করবেন?


98

আমি এখন গ্রিল প্রকল্পে অন্যদের সাথে একসাথে কাজ করছি। আমাকে কিছু জাভা-ক্লাস লিখতে হবে। তবে গ্রোভির সাহায্যে তৈরি একটি অনুসন্ধানযোগ্য অবজেক্টে আমার অ্যাক্সেস দরকার। দেখে মনে হচ্ছে, এই অবজেক্টটি ডিফল্ট-প্যাকেজটিতে রাখতে হবে।

আমার প্রশ্নটি: কোনও নামযুক্ত প্যাকেজে জাভা-শ্রেণি থেকে ডিফল্ট-প্যাকেজে এই অবজেক্টটি অ্যাক্সেস করার কোনও উপায় আছে কি?

উত্তর:


129

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

J2SE 1.4 এর আগে আপনি ডিফল্ট প্যাকেজ থেকে এই জাতীয় সিনট্যাক্স ব্যবহার করে ক্লাস আমদানি করতে পারবেন:

import Unfinished;

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

গ্রোভির উত্পন্ন উত্সটিতে আপনার অ্যাক্সেস থাকলে, একটি উত্সর্গীকৃত প্যাকেজে ফাইল স্থানান্তরিত করতে এবং তার শুরুতে এই "প্যাকেজ" নির্দেশিকা যুক্ত করার জন্য কিছু পোস্ট-প্রসেসিং প্রয়োজন।


আপডেট 2014: জেডিকে 7 এবং জেডি কে 8 এর জন্য বাগ 6975015 , নামবিহীন প্যাকেজ থেকে আমদানির বিরুদ্ধে এমনকি আরও কঠোর নিষেধাজ্ঞার বর্ণনা দেয় ।

TypeNameএকটি বর্গ ধরন, ইন্টারফেস ধরন, enum প্রকার, বা টীকা টাইপ প্রামাণ্য নামটি হতে হবে।
প্রকারটি অবশ্যই নামযুক্ত প্যাকেজের সদস্য হতে হবে বা এমন ধরণের সদস্য হতে হবে যার বহিরাগত লেকসুলি এনকোলেসিং প্রকারটি নামযুক্ত প্যাকেজের সদস্য , বা একটি সংকলন-সময় ত্রুটি ঘটে


আন্দ্রিয়াস পয়েন্ট আউট মন্তব্য :

"কেন সেখানে [ডিফল্ট প্যাকেজ] প্রথম স্থানে? ডিজাইনের ত্রুটি?"

না, এটা ইচ্ছাকৃত।
জেএলএস 7.4.2। নামহীন প্যাকেজগুলি বলে: "ছোট বা অস্থায়ী অ্যাপ্লিকেশন বিকাশ করার সময় বা যখন কেবলমাত্র বিকাশ শুরু করা যায় তখন সুবিধার জন্য জাভা এসই প্ল্যাটফর্ম দ্বারা নামহীন প্যাকেজগুলি সরবরাহ করা হয়"।


7
আমি অন্য লোকদের আগে যেমন ব্যাখ্যা করেছি, ডিফল্ট প্যাকেজটি জাভা বিশ্বের দ্বিতীয় শ্রেণির নাগরিক। জাস্ট ডোন্ট ডু দ্যাট। :-)
ক্রিস জেস্টার-ইয়াং

4
মনে হয় আমাকে ডিগ্রি-প্যাকেজে গ্রোভি (খুব সময়ের-সীমাবদ্ধ প্রকল্পে) বা কোড শিখতে হবে। :-(
Mnementh

11
@ ক্রিসজেস্টার-ইয়াং যদি তাই হয় তবে কেন এটি প্রথম স্থানে রয়েছে? ডিজাইনের ত্রুটি?
পেসারিয়ার

কেন এটি অবমূল্যায়ন করা হয়েছিল?
সুজন সিওক

@ সুজানসিওক আপনার অর্থ কি: "J2SE1.4 এর পরে, আপনি আর ডিফল্ট প্যাকেজটি অ্যাক্সেস করতে পারবেন না?"
ভোনসি

61

আসলে, আপনি পারেন।

প্রতিচ্ছবি এপিআই ব্যবহার করে আপনি এখন পর্যন্ত যে কোনও শ্রেণিতে অ্যাক্সেস করতে পারবেন। কমপক্ষে আমি সক্ষম ছিল :)

Class fooClass = Class.forName("FooBar");
Method fooMethod = fooClass.getMethod("fooMethod", String.class);

String fooReturned = (String)fooMethod.invoke(fooClass.newInstance(), "I did it");

স্কালার জন্য, নিম্নলিখিত val bar = "hi"; val fooClass = Class.forName("FooClass"); val fooMethod = fooClass.getMethod("foo", classOf[Array[String]]); val fooReturned = fooMethod.invoke(fooClass.newInstance(), Array(bar));
কোডগুলি

4
দুর্দান্ত উত্তর, +1। যেহেতু প্রশ্নটি উদ্বেগজনক ছিল, তবে আপনি হাঁসের টাইপিং ব্যবহার করতে পারেন (ড্যাক্ট টেপিংয়ের মতো আমার ধারণা) ...Class.forName("FooBar").newInstance().fooMethod("I did it")
বিল কে

7

নিম্নলিখিত বিধি দিয়ে জার ফাইলটি পুনরায় প্যাকেজ করতে জারজার ব্যবহার করুন :

rule * <target package name>.@1

উত্স জার ফাইলের ডিফল্ট প্যাকেজের সমস্ত শ্রেণি লক্ষ্য প্যাকেজে চলে যাবে, এভাবে অ্যাক্সেস করতে সক্ষম।


4
জারজার কীভাবে ব্যবহার করবেন তার একটি ডেমো দুর্দান্ত থাকবে
বিজিজিজেড

@ বিজিজিজেড: পিঁপড়া, গ্রেডল বা কমান্ড লাইনের সাহায্যে জারজার কীভাবে ব্যবহার করতে হয় তা দেখতে জারজার গিথুব রেপোতে README.md ফাইলটি দেখুন ।
লুসিডিয়ট

3

আপনি Groovyকোডে প্যাকেজগুলি ব্যবহার করতে পারেন এবং জিনিসগুলি ঠিকঠাক কাজ করবে।

এর অর্থ কোডের নীচে একটি ছোটখাটো পুনর্গঠন grails-appএবং প্রথমে কিছুটা ব্যথা হতে পারে তবে একটি বড় গ্রিল প্রকল্পে প্যাকেজগুলিতে জিনিসগুলি সংগঠিত করার পক্ষে তা বোঝা যায়। আমরা জাভা স্ট্যান্ডার্ড প্যাকেজ নামকরণ কনভেনশন ব্যবহার করি com.foo.<app>.<package>

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

কন্ট্রোলাররা মনে হয় এমন এক গ্রিল আর্টিক্যাক্ট (বা আর্টফ্যাক্ট) যা জাভা প্যাকেজটিতে রাখা থেকে বিরত থাকে। সম্ভবত আমি Conventionএখনও এটি জন্য সন্ধান করতে পারেনি। ;-)


0

শুধু ধারণাটি সম্পূর্ণ করতে:

ডিফল্ট-প্যাকেজটির অভ্যন্তর থেকে আপনি নামযুক্ত প্যাকেজগুলিতে থাকা অবজেক্টগুলিতে অ্যাক্সেস করতে পারবেন।

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