জাভাতে আমদানির নাম পরিবর্তন করুন, বা একই নামে দুটি ক্লাস আমদানি করুন


363

পাইথনে আপনি এটি করতে পারেন:

from a import b as c

জাভাতে আপনি এটি কীভাবে করবেন, কারণ আমার দুটি আমদানি সংঘর্ষের মধ্যে রয়েছে।


19
আমার ইচ্ছা জাভা এই করত। ক্লাস ডাব্লু / বিশ্রী নাম থেকে বাড়ে।
fncomp

2
@fncomp: .. এবং সম্পূর্ণরূপে যোগ্য শ্রেণীবদ্ধের সাথে অগোছালো কোড: পি
সুপারোল

2
জাভা 12 এ এখনও নেই
জ্যানাক মীনা

উত্তর:


463

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

একটি শ্রেণি আমদানি করুন এবং অন্য শ্রেণীর জন্য সম্পূর্ণ যোগ্য নামটি ব্যবহার করুন, যেমন

import com.text.Formatter;

private Formatter textFormatter;
private com.json.Formatter jsonFormatter;

16
এটি সঠিক উত্তর এবং এটিতে আমি কেবলমাত্র যা বলেছি তা যুক্ত করব: না, জাভাতে এমন কোনও এলিয়াসিং সিনট্যাক্স নেই।
শন ওভেন

19
এটি এখনও জাভা 8 এ একটি সীমাবদ্ধতা?
হেয়ারঅফডডগ

8
@ হায়ারফডডগ নোপ, দুর্ভাগ্যক্রমে জাভা 8-তে কোনও আমদানি এলিয়াসিং যোগ করা হয়নি
অ্যাড্রিয়ান খিসবে

12
হ্যাঁ আমি আপনার মন্তব্যে লিনাক্সদানের সাথে একমত ... জাভা তার সিনট্যাক্সের আপডেটের ক্ষেত্রে ডাইনোসরের পথে চলেছে।
কেভিন পার্কার

6
@Bozho পথ পাইথন আছে: import [fully-qualified-name] as [ident]। "হিসাবে" KEYWORD পাশাপাশি জাভা মাপসই বলে মনে হচ্ছে না, একটি বিকল্প আনুমানিক কি C # এর ব্যবহার: import [ident] = [fully-qualified-name]
ড্যানিয়েল এইচ

60

অন্যান্য উত্তর যেমন ইতিমধ্যে বলেছে, জাভা এই বৈশিষ্ট্যটি সরবরাহ করে না।

এই বৈশিষ্ট্যটির বাস্তবায়নের জন্য একাধিকবার অনুরোধ করা হয়েছে, যেমন জেডিকে-4194542: শ্রেণীর নাম আলিয়াসিং বা জেডিকে -২২১78789৯: আমদানি করা ধরণের নামকরণের অনুমতি দেওয়ার জন্য আমদানি প্রসারিত করুন

মন্তব্য থেকে:

এটি অযৌক্তিক অনুরোধ নয়, যদিও খুব কমই প্রয়োজনীয়। মাঝেমধ্যে সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নাম ব্যবহার করা বাছাই করা বোঝা নয় (যদি না গ্রন্থাগারটি সত্যিকারের একই নামগুলি ডান এবং বামে পুনরায় ব্যবহার না করে, যা খারাপ স্টাইল)।

কোনও ইভেন্টে, এটি কোনও ভাষা পরিবর্তনের জন্য মূল্য / পারফরম্যান্সের বারটি পাস করে না।

সুতরাং আমার ধারণা আমরা খুব শীঘ্রই জাভাতে এই বৈশিষ্ট্যটি দেখতে পাব না :- পি


15
কি দারুন! আপনি "শীঘ্রই (") কোনও সময় শীঘ্রই না "সম্পর্কে কৌতুক করছেন না, আমি দেখতে পাচ্ছি যে বৈশিষ্ট্যটির অনুরোধটি 1998 সালের মতো অর্থহীন চিনির হিসাবে বরখাস্ত করা হয়েছিল! এবং এই অতীত 18 বছর সময়কালে আলোচনাটি পুনরায় খোলার প্রতিটি প্রচেষ্টা সেই প্রাচীন সিদ্ধান্তের প্রসঙ্গে আটকে গিয়েছে। আমার ধারণা, আইডই-বিকাশকারীদের ওরাকলটিতে জ্ঞান ছোঁড়ার চেষ্টা করার চেয়ে এডিটরটির মুখোশ হিসাবে এটি প্রয়োগ করা সহজ হবে convince
সুপারল

2
পুরানো যুক্তি যদিও সঠিক - বাস্তবে এই সংঘর্ষগুলি খুব কমই ঘটে।
পাতলা

14
আমি স্বীকার করি না যে এই সংঘাতগুলি খুব কমই ঘটে। অবজেক্ট অরিয়েন্টেশন সাধারণ নামকরণের পক্ষে। আমার কাছে দুটি পৃথক গ্রন্থাগার থেকে একটি শ্রেণীর কর্মচারী থাকতে পারে যা কোনও কর্মীর সাথে পৃথক জিনিস করে (উদাহরণস্বরূপ)।
আন্দ্রে ইপুরে

6
@ স্লিম "বাস্তবে এই সংঘাত খুব কমই ঘটে " " এটা আমার কাছে স্পষ্ট নয় কেন এই পরিস্থিতিতে অন্য ভাষায় (যেখানে আপনি সাধারণত কম ক্লাস আছে) যা তুলনায় জাভা কম ঘন ঘন ঘটবে (আপনি 10.000+ ক্লাস আছে যেখানে) না এই "চিনি" সিনট্যাক্স সমর্থন করি।
আলাইন পান্নেটিয়ার

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

59

গ্রোভির এই বৈশিষ্ট্যটি সম্ভবত উল্লেখযোগ্য :

import java.util.Calendar
import com.example.Calendar as MyCalendar

MyCalendar myCalendar = new MyCalendar()

15
স্কালায় এটি:import com.example.{Calendar => MyCalendar}
প্যাব্লিসকো

24
আর Kotlin মধ্যে: import com.example.Calendar as MyCalendar
কেভিনও

14
পিএইচপি তে এটি: কম ব্যবহার করুন \ উদাহরণ \ মাইক্যালেন্ডার হিসাবে ক্যালেন্ডার
মাতঙ্গ

19
এটি দেখতে বেশ বিরক্তিকর যে (কমপক্ষে) 3 জেভিএম ভিত্তিক ভাষা (গ্রোভি, স্কালা এবং কোটলিন) এই বৈশিষ্ট্যটি রয়েছে তবে জাভা নিজেও এখনও তা না ...
ম্যাথিয়াস

2
এরকম কিছু সম্পর্কে কি class MyCalendar extends com.example.Calendar {}? এটি আদর্শ বা সুন্দর নয়, তবে এটি বেশিরভাগ উদ্দেশ্যেই বলা উচিত, প্রতিচ্ছবিটি প্রতিবিম্বিত হবে। এমনকি প্রয়োজনে আপনি একটি মন্তব্য দিয়ে এটি প্রেন্ডিং করতে পারেন, পছন্দ করুন /* import com.example.Calendar as MyCalendar */
ব্র্যাডেন সেরা

21

জাভা আপনাকে এটি করতে দেয় না। আপনার ক্লাসগুলির একটির সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নাম দ্বারা উল্লেখ করতে হবে এবং কেবলমাত্র অন্যটি আমদানি করতে হবে।


8

আজ আমি এই এলিয়াসিং বৈশিষ্ট্যটি সম্পর্কে ওপেনজেডিকে একটি জেপি খসড়া দায়ের করেছি। আমি আশা করি তারা এটি পুনর্বিবেচনা করবে।

আপনি যদি আগ্রহী হন তবে আপনি এখানে একটি জেইপি খসড়াটি পেতে পারেন: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7


-4

আসলে একটি শর্টকাট তৈরি করা সম্ভব যাতে আপনি নিজের কোডটিতে এই জাতীয় কিছু করে সংক্ষিপ্ত নামগুলি ব্যবহার করতে পারেন:

package com.mycompany.installer;
public abstract class ConfigurationReader {
    private static class Implementation extends com.mycompany.installer.implementation.ConfigurationReader {}
    public abstract String getLoaderVirtualClassPath();
    public static QueryServiceConfigurationReader getInstance() {
        return new Implementation();
    }
}

এইভাবে আপনাকে একবারে দীর্ঘ নামটি নির্দিষ্ট করতে হবে এবং আপনি যতগুলি বিশেষ নামী ক্লাস চান তা করতে পারেন।

এই প্যাটার্নটি সম্পর্কে আমি আর একটি জিনিস পছন্দ করি তা হল আপনি বাস্তবায়নকারী শ্রেণীর নাম বিমূর্ত বেস শ্রেণীর মতো করতে পারেন, এবং এটি অন্য একটি নেমস্পেসে রেখে দিতে পারেন। যদিও এটি আমদানি / নামকরণের প্যাটার্নের সাথে সম্পর্কিত নয়।


18
এটি একটি খুব দুর্বল সমাধান। এটি স্ট্যাটিক্সের সাথে ডিল করতে সম্পূর্ণরূপে ব্যর্থ হয়, ধ্রুবক আপডেটের প্রয়োজন হতে পারে এবং ডি / সিরিয়ালাইজেশন সমস্যাগুলির সাথে সহায়তা করে না (যেমন জ্যাক্সবি এর মাধ্যমে এক্সএমএল থেকে ডিসরিয়ালাইজিং)।
সফটওয়্যার ইঞ্জিনিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.