import java.lang.reflect.Field;
public class Main {
public static void main
(String[] args
) { HasPrivate hasPrivate = new HasPrivate();
Nakami nakami = new Nakami();
System.
out.
println("Nakamiをセットします。"); setNakami(hasPrivate, nakami);
System.
out.
println("セットしたNakamiを取得します。"); getNakami(hasPrivate, nakami);
System.
out.
println("もともと入れてあるNakamiを取得します。"); getArimasu(hasPrivate);
}
public static void setNakami(HasPrivate hasPrivate, Nakami nakami) {
try {
Field privateField
= HasPrivate.
class.
getDeclaredField("nakami"); privateField.setAccessible(true);
privateField.set(hasPrivate, nakami);
// TODO Auto-generated catch block
e.printStackTrace();
// TODO Auto-generated catch block
e.printStackTrace();
// TODO Auto-generated catch block
e.printStackTrace();
e.printStackTrace();
}
}
public static void getNakami(HasPrivate hasPrivate, Nakami nakami) {
try {
Field privateField
= HasPrivate.
class.
getDeclaredField("nakami"); privateField.setAccessible(true);
Nakami nakami2 = (Nakami) privateField.get(hasPrivate);
System.
out.
println("取得したnakami:" + nakami2
); System.
out.
println("HasPrivateからもらったnakami:"+hasPrivate.
getNakami()); System.
out.
println("Nakamiのnakami:" + nakami2.
nakami); e.printStackTrace();
}
}
public static void getArimasu(HasPrivate hasPrivate) {
try {
Field arimasu
= HasPrivate.
class.
getDeclaredField("arimasu"); arimasu.setAccessible(true);
Nakami nakami = (Nakami) arimasu.get(hasPrivate);
System.
out.
println("取得したarimasu:" + nakami
); System.
out.
println("HasPrivateからもらったariamsu:"+hasPrivate.
getArimasu()); System.
out.
println("arimasuのnakami:" + nakami.
nakami); e.printStackTrace();
}
}
}
class HasPrivate {
private Nakami nakami;
private Nakami arimasu=new Nakami();
public Nakami getNakami(){
return nakami;
}
public Nakami getArimasu(){
return arimasu;
}
}
class Nakami {
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgCUhhc1ByaXZhdGUgaGFzUHJpdmF0ZSA9IG5ldyBIYXNQcml2YXRlKCk7CiAgICAJCiAgICAgICAgTmFrYW1pIG5ha2FtaSA9IG5ldyBOYWthbWkoKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5ha2FtaeOCkuOCu+ODg+ODiOOBl+OBvuOBmeOAgiIpOwogICAgICAgIHNldE5ha2FtaShoYXNQcml2YXRlLCBuYWthbWkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigi44K744OD44OI44GX44GfTmFrYW1p44KS5Y+W5b6X44GX44G+44GZ44CCIik7CiAgICAgICAgZ2V0TmFrYW1pKGhhc1ByaXZhdGUsIG5ha2FtaSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCLjgoLjgajjgoLjgajlhaXjgozjgabjgYLjgotOYWthbWnjgpLlj5blvpfjgZfjgb7jgZnjgIIiKTsKICAgICAgICBnZXRBcmltYXN1KGhhc1ByaXZhdGUpOwogICAgfQkKCgogICAgcHVibGljIHN0YXRpYyB2b2lkIHNldE5ha2FtaShIYXNQcml2YXRlIGhhc1ByaXZhdGUsIE5ha2FtaSBuYWthbWkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBGaWVsZCBwcml2YXRlRmllbGQgPSBIYXNQcml2YXRlLmNsYXNzLmdldERlY2xhcmVkRmllbGQoIm5ha2FtaSIpOwogICAgICAgICAgICBwcml2YXRlRmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICAgICAgICAgcHJpdmF0ZUZpZWxkLnNldChoYXNQcml2YXRlLCBuYWthbWkpOwogICAgICAgIH0gY2F0Y2ggKE5vU3VjaEZpZWxkRXhjZXB0aW9uIHwgU2VjdXJpdHlFeGNlcHRpb24gZSkgewogICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawogICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewogICAgICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSl7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXROYWthbWkoSGFzUHJpdmF0ZSBoYXNQcml2YXRlLCBOYWthbWkgbmFrYW1pKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgRmllbGQgcHJpdmF0ZUZpZWxkID0gSGFzUHJpdmF0ZS5jbGFzcy5nZXREZWNsYXJlZEZpZWxkKCJuYWthbWkiKTsKICAgICAgICAgICAgcHJpdmF0ZUZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7CiAgICAgICAgICAgIE5ha2FtaSBuYWthbWkyID0gKE5ha2FtaSkgcHJpdmF0ZUZpZWxkLmdldChoYXNQcml2YXRlKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCLlj5blvpfjgZfjgZ9uYWthbWk6IiArIG5ha2FtaTIpOwogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhhc1ByaXZhdGXjgYvjgonjgoLjgonjgaPjgZ9uYWthbWk6IitoYXNQcml2YXRlLmdldE5ha2FtaSgpKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOYWthbWnjga5uYWthbWk6IiArIG5ha2FtaTIubmFrYW1pKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBnZXRBcmltYXN1KEhhc1ByaXZhdGUgaGFzUHJpdmF0ZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIEZpZWxkIGFyaW1hc3UgPSBIYXNQcml2YXRlLmNsYXNzLmdldERlY2xhcmVkRmllbGQoImFyaW1hc3UiKTsKICAgICAgICAgICAgYXJpbWFzdS5zZXRBY2Nlc3NpYmxlKHRydWUpOwogICAgICAgICAgICBOYWthbWkgbmFrYW1pID0gKE5ha2FtaSkgYXJpbWFzdS5nZXQoaGFzUHJpdmF0ZSk7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigi5Y+W5b6X44GX44GfYXJpbWFzdToiICsgbmFrYW1pKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIYXNQcml2YXRl44GL44KJ44KC44KJ44Gj44GfYXJpYW1zdToiK2hhc1ByaXZhdGUuZ2V0QXJpbWFzdSgpKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhcmltYXN144GubmFrYW1pOiIgKyBuYWthbWkubmFrYW1pKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSl7CiAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgfQogICAgfQp9CgpjbGFzcyBIYXNQcml2YXRlIHsKICAgIHByaXZhdGUgTmFrYW1pIG5ha2FtaTsKICAgIHByaXZhdGUgTmFrYW1pIGFyaW1hc3U9bmV3IE5ha2FtaSgpOwoKICAgIHB1YmxpYyBOYWthbWkgZ2V0TmFrYW1pKCl7CiAgICAgICAgcmV0dXJuIG5ha2FtaTsKICAgIH0KCiAgICBwdWJsaWMgTmFrYW1pIGdldEFyaW1hc3UoKXsKICAgICAgICByZXR1cm4gYXJpbWFzdTsKICAgIH0KfQoKCgpjbGFzcyBOYWthbWkgewogICAgcHVibGljIFN0cmluZyBuYWthbWk9IuS4rei6qyI7Cn0=