У вас есть несколько вариантов. Вы можете использовать агрегацию так
class normalClass
{
protected $superClass;
public function __construct( superClass $superClass )
{
$this->superClass = $superClass;
}
public function someMethod()
{
$this->superClass->doSomething();
}
}
class superClass
{
public function __construct()
{
$inst = new normalClass( $this );
$inst->someMethod();
}
public function doSomething()
{ //this method shall be be accessed by domeMethod form normalClass
}
}
Или просто прямолинейный сеттер
class normalClass
{
protected $superClass;
public function setSuperClass( superClass $superClass )
{
$this->superClass = $superClass;
}
public function someMethod()
{
if ( !isset( $this->superClass ) )
{
throw new Exception( 'you must set a superclass' );
}
$this->superClass->doSomething();
}
}
class superClass
{
public function __construct()
{
$inst = new normalClass();
$inst->setSuperClass( $this );
$inst->someMethod();
}
public function doSomething()
{ //this method shall be be accessed by domeMethod form normalClass
}
}
Это как задумано. Java 7 изменила способ работы Locale.getDefault()
. В Oracle был обнаружен дефект, но в основном они сказали, что это As Designed.
Подводя итог, вы должны изменить язык интерфейса ОС. Только изменение формата региона уже недостаточно.
Прочитайте отчет об ошибке здесь: Locale.getDefault () возвращает неправильный языковой стандарт для Java SE 7
Это действительно выглядит для меня как ошибка:
public static void main(String[] args) throws FileNotFoundException, IOException {
System.err.println(Locale.getDefault());
}
запускать это с отпечатками java 5 или java 6: 'nl_NL' java7: 'en_US'
Проверьте настройку «Местоположение» на панели управления Windows. Региональные и языковые параметры (немецкий: «Region und Sprache», «Aufenthaltsort»).
Это изменение довольно хорошо описано в этом сообщении в блоге и на странице совместимости .
Обратите внимание, что вы можете вернуться к старому поведению, установив системное свойство sun.locale.formatasdefault
на true
.
Если вы достаточно смелы, вы можете позвонить:
Locale.setDefault(Locale.getDefault());
Это устанавливает локаль по умолчанию для обеих этих категорий
public static synchronized void setDefault(Locale newLocale) {
setDefault(Category.DISPLAY, newLocale);
setDefault(Category.FORMAT, newLocale);
defaultLocale = newLocale;
}
Но это, конечно, может вызвать побочные эффекты.