Как может быть в спящем режиме доступ частное поле?

простой способ использовать для своей выгоды первую букву каждого слова (разделенный пространством)

$words = explode(” “, $string);
for ($i=0; $i<count($words); $i++) {
$s = strtolower($words[$i]);
$s = substr_replace($s, strtoupper(substr($s, 0, 1)), 0, 1);
$result .= “$s “;
}
$string = trim($result);

с точки зрения ловли примера "O'REILLY", который Вы дали разделению строки на обоих пробелах и, 'не будет работать, поскольку это использовало бы для своей выгоды любую букву, которая появилась после apostraphe т.е. s в Fred

, таким образом, я, вероятно, попробую что-то как

$words = explode(” “, $string);
for ($i=0; $i<count($words); $i++) {

$s = strtolower($words[$i]);

if (substr($s, 0, 2) === "o'"){
$s = substr_replace($s, strtoupper(substr($s, 0, 3)), 0, 3);
}else{
$s = substr_replace($s, strtoupper(substr($s, 0, 1)), 0, 1);
}
$result .= “$s “;
}
$string = trim($result);

, Это должно поймать O'Reilly, Час, O'Donnell и т.д. надеется, что это помогает

, обратите внимание, что этот код не тестируется.

6
задан Pierre 11 July 2009 в 09:50
поделиться

3 ответа

Как говорит Криппледсмурф, он использует отражение. См. Отражение: нарушение всех правил и Гибернация: сохранение контракта объекта .

10
ответ дан 8 December 2019 в 13:48
поделиться

Попытка

import java.lang.reflect.Field;

class Test {
   private final int value;
   Test(int value) { this.value = value; }
   public String toString() { return "" + value; }
}

public class Main {
   public static void main(String... args) throws NoSuchFieldException, IllegalAccessException {
       Test test = new Test(12345);
       System.out.println("test= "+test);

       Field value = Test.class.getDeclaredField("value");
       value.setAccessible(true);
       System.out.println("test.value= "+value.get(test));
       value.set(test, 99999);
       System.out.println("test= "+test);
       System.out.println("test.value= "+value.get(test));
   }
}

выводит

test= 12345
test.value= 12345
test= 99999
test.value= 99999
4
ответ дан 8 December 2019 в 13:48
поделиться

Предположительно, я бы сказал, что это делается путем отражения целевого типа и установки полей напрямую с помощью отражения

Я не программист на Java, но я считаю, что в Java есть поддержка отражения, аналогичная к .NET, который я использую

3
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: