Itu jawaban yang tepat dan untuk itu saya hanya menambahkan apa yang Anda tersirat: tidak, tidak ada sintaks alias di Jawa.
Sean Owen
19
Apakah ini masih menjadi batasan di Java 8?
HairOfTheDog
8
@HairOfTheDog Tidak, sayangnya tidak ada aliasing impor telah ditambahkan di Java8
AdrieanKhisbe
12
Ya saya setuju dengan komentar Anda linuxdan ... Java telah mengikuti cara dinosaurus dalam hal pembaruan sintaksisnya.
Kevin Parker
6
@Bozho Cara python tidak: import [fully-qualified-name] as [ident]. The “sebagai” kata kunci tampaknya tidak cocok di Jawa juga, alternatif adalah kira-kira apa C # menggunakan: import [ident] = [fully-qualified-name].
Daniel H
60
Seperti jawaban lain yang sudah dinyatakan, Java tidak menyediakan fitur ini.
Ini bukan permintaan yang tidak masuk akal, meskipun sulit. Penggunaan sesekali nama-nama yang memenuhi syarat sepenuhnya bukanlah beban yang tidak semestinya (kecuali perpustakaan benar-benar menggunakan kembali nama-nama sederhana yang sama kanan dan kiri, yang merupakan gaya yang buruk).
Bagaimanapun, itu tidak melewati bilah harga / kinerja untuk perubahan bahasa.
Jadi saya kira kita tidak akan melihat fitur ini di Jawa dalam waktu dekat :-P
Wow! Anda tidak bercanda tentang "tidak (...) dalam waktu dekat", saya melihat bahwa permintaan fitur ditolak sebagai gula tidak berguna sejauh tahun 1998! Dan setiap upaya untuk membuka kembali diskusi selama 18 tahun terakhir ini telah terdampar pada referensi ke keputusan kuno itu. Saya kira akan lebih mudah untuk meyakinkan para pengembang IDE untuk mengimplementasikan ini sebagai topeng di editor daripada mencoba untuk masuk akal ke Oracle.
Superole
2
Namun, alasan lama itu benar - dalam praktiknya bentrok ini sangat jarang terjadi.
langsing
14
Saya tidak setuju bahwa bentrokan ini jarang terjadi. Orientasi objek lebih menyukai penamaan sederhana. Saya dapat memiliki Karyawan kelas dari dua perpustakaan berbeda yang melakukan hal-hal terpisah dengan seorang karyawan (misalnya).
Andrei Epure
6
@slim " dalam prakteknya bentrokan ini sangat jarang terjadi ". Tidak jelas bagi saya mengapa situasi ini akan terjadi lebih sering pada java (di mana Anda dapat memiliki 10.000+ kelas) dibandingkan dalam bahasa lain (di mana Anda biasanya memiliki kelas kurang) yang melakukan mendukung ini "gula" sintaks.
Alain Pannetier
21
Benar-benar salah. Saya menghadapi skenario yang sangat sederhana yang mungkin sangat umum dan di mana gula sintaksis ini akan sangat membantu. Penerjemahan antara model objek yang terkait, tetapi berbeda (masing-masing digunakan dalam produk terkait tetapi berbeda) yang kelasnya sebagian besar berbagi nama yang sama. Proses penerjemahan mengharuskan Anda untuk merujuk ke kedua kelas di blok kode yang sama. Dalam kasus seperti itu (yang pasti sangat umum), Jawa membuat hidup sangat sulit. Jumlah tampilan di pos ini yang akan menceritakan kisahnya kepada Anda.
Di Scala itu:import com.example.{Calendar => MyCalendar}
pablisco
24
Dan di Kotlin: import com.example.Calendar as MyCalendar.
KevinO
14
Dalam PHP itu: gunakan com \ example \ Kalender sebagai MyCalendar
jatuh
19
Sangat menjengkelkan melihat bahwa (setidaknya) 3 bahasa berbasis JVM (Groovy, Scala & Kotlin) memiliki fitur ini tetapi Java sendiri masih tidak ...
Matthias
2
Bagaimana dengan sesuatu seperti itu class MyCalendar extends com.example.Calendar {}? Ini tidak ideal atau cantik, tetapi seharusnya melayani sebagian besar tujuan singkat, katakanlah, refleksi. Anda bahkan dapat menambahkannya dengan komentar jika perlu, misalnya /* import com.example.Calendar as MyCalendar */.
Braden Best
21
Java tidak memungkinkan Anda untuk melakukan itu. Anda harus merujuk ke salah satu kelas dengan nama yang sepenuhnya memenuhi syarat dan hanya mengimpor yang lain.
Sebenarnya dimungkinkan untuk membuat jalan pintas sehingga Anda dapat menggunakan nama yang lebih pendek dalam kode Anda dengan melakukan sesuatu seperti ini:
Dengan cara itu Anda hanya perlu menentukan nama panjang satu kali, dan Anda dapat memiliki banyak kelas khusus yang Anda inginkan.
Hal lain yang saya sukai dari pola ini adalah Anda dapat memberi nama kelas implementasinya sama dengan kelas dasar abstrak, dan letakkan saja di namespace yang berbeda. Itu tidak terkait dengan pola impor / penggantian nama.
Ini adalah solusi yang sangat buruk. Itu benar-benar gagal untuk berurusan dengan statika, mungkin memerlukan pembaruan konstan, dan tidak membantu dengan masalah de / serialisasi (seperti deserialising dari xml melalui jaxb).
Jawaban:
Tidak ada mekanisme aliasing impor di Jawa. Anda tidak dapat mengimpor dua kelas dengan nama yang sama dan menggunakan keduanya tanpa kualifikasi.
Impor satu kelas dan gunakan nama yang sepenuhnya memenuhi syarat untuk yang lain, yaitu
sumber
import [fully-qualified-name] as [ident]
. The “sebagai” kata kunci tampaknya tidak cocok di Jawa juga, alternatif adalah kira-kira apa C # menggunakan:import [ident] = [fully-qualified-name]
.Seperti jawaban lain yang sudah dinyatakan, Java tidak menyediakan fitur ini.
Implementasi fitur ini telah diminta beberapa kali, misalnya sebagai JDK-4194542: nama kelas aliasing atau JDK-4214789: Perpanjang impor untuk memungkinkan penggantian nama dari jenis yang diimpor .
Dari komentar:
Jadi saya kira kita tidak akan melihat fitur ini di Jawa dalam waktu dekat :-P
sumber
Mungkin perlu dicatat bahwa Groovy memiliki fitur ini :
sumber
import com.example.{Calendar => MyCalendar}
import com.example.Calendar as MyCalendar
.class MyCalendar extends com.example.Calendar {}
? Ini tidak ideal atau cantik, tetapi seharusnya melayani sebagian besar tujuan singkat, katakanlah, refleksi. Anda bahkan dapat menambahkannya dengan komentar jika perlu, misalnya/* import com.example.Calendar as MyCalendar */
.Java tidak memungkinkan Anda untuk melakukan itu. Anda harus merujuk ke salah satu kelas dengan nama yang sepenuhnya memenuhi syarat dan hanya mengimpor yang lain.
sumber
Hari ini saya mengajukan konsep JEP ke OpenJDK tentang fitur aliasing ini. Saya berharap mereka akan mempertimbangkannya kembali.
Jika Anda tertarik, Anda dapat menemukan draft JEP di sini: https://gist.github.com/cardil/b29a81efd64a09585076fe00e3d34de7
sumber
Sebenarnya dimungkinkan untuk membuat jalan pintas sehingga Anda dapat menggunakan nama yang lebih pendek dalam kode Anda dengan melakukan sesuatu seperti ini:
Dengan cara itu Anda hanya perlu menentukan nama panjang satu kali, dan Anda dapat memiliki banyak kelas khusus yang Anda inginkan.
Hal lain yang saya sukai dari pola ini adalah Anda dapat memberi nama kelas implementasinya sama dengan kelas dasar abstrak, dan letakkan saja di namespace yang berbeda. Itu tidak terkait dengan pola impor / penggantian nama.
sumber