...
| Wiki Markup |
|---|
A {{private}} constructor alongside a {{public}} factory method may be used when it is desired to publish the {{filter()}} method from within the constructor. \[[Goetz 06|AA. Java References#Goetz 06]\]. |
| Code Block | ||
|---|---|---|
| ||
public class GoodExceptionReporter implements ExceptionReporter {
private final ExceptionReporters er;
private GoodExceptionReporter(ExceptionReporter excr) {
er = new ExceptionReporters(excr) {
public void report(Throwable t) {
filter(t);
}
};
}
public static GoodExceptionReporter newInstance(ExceptionReporter excr) {
GoodExceptionReporter ger = new GoodExceptionReporter(excr);
excr.setExceptionReporter(ger.er);
return ger;
}
public void filter(Throwable t) { }
public void report(Throwable exception) { }
public void setExceptionReporter(ExceptionReporter er) { }
}
|
...
| Wiki Markup |
|---|
This noncompliant code example starts a thread from within the constructor. This allows the new thread to access the {{this}} reference of the current object. \[[Goetz 02|AA. Java References#Goetz 02]\] and \[, [Goetz 06|AA. Java References#Goetz 06]\]. |
| Code Block | ||
|---|---|---|
| ||
public someConstructor() {
thread = new MyThread(this);
thread.start();
}
|
...
| Wiki Markup |
|---|
In this compliant solution, even though the thread is created in the constructor, it is not started unless the {{start()}} method is called from somewhere other than the constructor. This behavior is permissible. \[[Goetz 02|AA. Java References#Goetz 02]\] and, \[[Goetz 06|AA. Java References#Goetz 06]\]. |
| Code Block | ||
|---|---|---|
| ||
public someConstructor() {
thread = new MyThread(this);
}
public void start() {
thread.start();
}
|
...