Я хочу создать одноэлементный класс Phone, так что он может быть инициализирован (с номером), а также одновременно совместим. Итак, вот что я пришел с:Однопользовательский однопользовательский режим с параметром инициализации в java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class PhoneTest {
public static void main(String... args){
System.out.println(Phone.getInstance().getNumber());
}
static final class Phone {
private final String number;
private final static Phone instance;
static {
instance = new Phone(PhonePropertyReader.readPhoneNumber());
}
private Phone(String number) {
this.number = number;
}
public static Phone getInstance() {
if (instance == null) throw
new IllegalStateException("instance was not initialized");
return instance;
}
public String getNumber() {
return number;
}
}
static final class PhonePropertyReader {
static String readPhoneNumber() {
File file = new File("phone.properties");
String phone = "";
System.out.println(file.getAbsolutePath());
if (!file.exists()) {
return phone = "555-0-101";
}
try {
BufferedReader r = new BufferedReader(new FileReader(file));
phone = r.readLine().split("=")[1].trim();
r.close();
} catch (IOException e) {
}
return phone;
}
}
}
также у меня есть файл phone.properties, содержащие
phone=12345
ли это хорошее решение? Является ли он одновременно безопасным?
Выглядит хорошо. Вы можете [прочитать это] (http://blog.crazybob.org/2007/01/lazy-loading-singletons.html) и сделать свой синглтон ленивым. –
так должно быть что-то вроде этого: http://pastebin.com/sZAAMRur? то я думаю, что PhoneHolder будет загружен точно в то же время, что и телефон, загрузив телефон, таким образом, загрузка телефона в этом примере произойдет одновременно с моим исходным кодом. Я прав? – dhblah
Да, вы правы. Вы, например, хорошо выглядите. За исключением пустого 'catch' на строке 50 - я бы предложил вам бросить [' ExceptionInInitializerError'] (http://docs.oracle.com/javase/6/docs/api/java/lang/ExceptionInInitializerError.html). –