Dengan Python Anda dapat melakukan:
from a import b as c
Bagaimana Anda melakukan ini di Jawa, karena saya memiliki dua impor yang berbenturan.
Dengan Python Anda dapat melakukan:
from a import b as c
Bagaimana Anda melakukan ini di Jawa, karena saya memiliki dua impor yang berbenturan.
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
import com.text.Formatter;
private Formatter textFormatter;
private com.json.Formatter jsonFormatter;
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:
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
Mungkin perlu dicatat bahwa Groovy memiliki fitur ini :
import java.util.Calendar
import com.example.Calendar as MyCalendar
MyCalendar myCalendar = new MyCalendar()
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 */
.
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
Sebenarnya dimungkinkan untuk membuat jalan pintas sehingga Anda dapat menggunakan nama yang lebih pendek dalam kode Anda dengan melakukan sesuatu seperti ini:
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();
}
}
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.