Как утверждает Джон Скит, нет никакого способа, кроме как использовать отражение.
Однако, если отражение является для вас вариантом, вы можете это сделать.
public static void main(String[] args) {
System.out.println("please enter a password");
// don't actually do this, this is an example only.
Scanner in = new Scanner(System.in);
String password = in.nextLine();
usePassword(password);
clearString(password);
System.out.println("password: '" + password + "'");
}
private static void usePassword(String password) {
}
private static void clearString(String password) {
try {
Field value = String.class.getDeclaredField("value");
value.setAccessible(true);
char[] chars = (char[]) value.get(password);
Arrays.fill(chars, '*');
} catch (Exception e) {
throw new AssertionError(e);
}
}
при запуске
please enter a password
hello world
password: '***********'
Примечание: если символ String [] был скопирован как часть цикла GC, есть вероятность, что предыдущая копия находится где-то в памяти.
Эта старая копия не появится в дампе кучи, но если у вас есть прямой доступ к необработанной памяти процесса, вы можете ее увидеть. В общем, вы должны избегать любого, кто имеет такой доступ.
Звучит как задание для динамического программирования. Поэтому я не буду представлять вам окончательное решение в коде. Скорее, я дам вам несколько советов.
Обозначим длину списка A
как N
. Представьте себе матрицу N
по N
из 1 и 0, обозначенную как X
. Если X(i, j)
равно 1, это означает, что A[i]
является правильным подмножеством A[j]
, в противном случае 0. Ваша задача - заполнить всю матрицу X
с минимальными затратами.
Существует несколько видов логических выводов, которые можно сделать для матрицы X
:
X(i, j) == 1
подразумевает X(j, i) == 0
len(A[i]) >= len(A[j])
подразумевает X(i, j) == 0
X(i, j) == 1 and X(j, k) == 1
подразумевает X(i, k) == 1
Ваша задача при разработке алгоритма состоит в том, чтобы упорядочить сравнения таким образом, чтобы количество требуемых сравнений в среднем для заполнения X
было минимальным в основном, используя правила выше как можно чаще.