每当我尝试从枚举中获取字段时,它总是返回null。 我已经根据枚举构造函数设置了它的值。它仍然显示为空。
<key>NSAppTransportSecurity</key>
<dict>
<key>Allow Arbitrary Loads</key>
<true/>
</dict>
Point枚举类
public enum TeamType {
RED("Red",ChatColor.RED,DyeColor.RED,Point.RED),
BLUE("Blue",ChatColor.BLUE,DyeColor.BLUE,Point.BLUE); //<----Set as Point.RED/BLUE
private String name;
private int crystalHealth = 50;
private Point point;
private int teamPoints;
private ChatColor chatColor;
private DyeColor dye;
private HashSet<ArenaPlayer> playerList = new HashSet<>();
private List<ArenaPlayer> queue = new ArrayList<ArenaPlayer>();
private Location spawn;
public Point getPoint()
{
if(point == null)
System.out.println("WHY? for: " + this.toString()); //<---This always runs
return point;
}
private TeamType(String name,ChatColor color,DyeColor dye,Point point1) {
this.name = name;
this.point = point1; // <--- My assignment
this.dye = dye;
this.chatColor = color;
}
在我对Java的了解之外,显然发生了某些事情。 TeamType枚举时,可能尚未初始化Point Enum。这可以解释为什么它为空。
我需要一些帮助。
答案 0 :(得分:3)
好吧,我认为问题的根源在于您有一个循环引用。 TeamType
有一个Point
参考,反之亦然。
假设TeamType
枚举类已初始化,则枚举常量也被初始化。这些引用Point
,而Point
又被初始化。类加载器将加载TeamType
类,但不会再次初始化using System.IO;
using System.Net.NetworkInformation;
using System.Net.Security;
using System.Net.Sockets;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// create an instance of TcpClient
TcpClient tcpclient = new TcpClient();
tcpclient.Connect("pop3.live.com", 995);
System.Net.Security.SslStream sslstream = new SslStream(tcpclient.GetStream());
sslstream.AuthenticateAsClient("pop3.live.com");
StreamWriter sw = new StreamWriter(sslstream);
System.IO.StreamReader reader = new StreamReader(sslstream);
sw.WriteLine("USER xxx@live.com"); sw.Flush();
sw.WriteLine("PASS xxxx****"); sw.Flush();
sw.WriteLine("RETR 1");
sw.Flush();
sw.WriteLine("Quit ");
sw.Flush();
string str = string.Empty;
string strTemp = string.Empty;
while ((strTemp = reader.ReadLine()) != null)
{
if (".".Equals(strTemp))
{
break;
}
if (strTemp.IndexOf("-ERR") != -1)
{
break;
}
str += strTemp;
}
Response.Write(str);
reader.Close();
sw.Close();
tcpclient.Close(); // close the connection
}
}
。此时,您期望为非null的属性仍为null。
JLS § 12.4定义了此过程。
答案 1 :(得分:0)
假设我们有一个名为A的类,其中有B类的Object。 (以UML术语A表示B)。同时,我们的类B也由类A的对象组成(以UML术语B HAS A表示)。显然,这表示循环依赖性,因为在创建A的对象时,编译器必须知道B的大小...另一方面,在创建B的对象时,编译器必须知道A的大小。这有点像egg vs.鸡问题...
要避免此类循环依赖,您可以使用任何代理接口。