如何检查实例类是否等于类中的变量?
public class ChainType
{
public ChainType none;
public ChainType unknown;
public ChainType horizontal;
public ChainType vertical;
public ChainType centerCross;
public ChainType leftTopCornerCross;
public ChainType rightTopCornerCross;
public ChainType leftBottomCornerCross;
public ChainType rightBottomCornerCross;
}
public class aClass{
ChainType chainType = new ChainType();
someMethod(){
chainType = getChainType(); // sets to chainType.horizontal
if(chainType == ChainType.horizontal){..} // getting Error here about object reference to non-static class
}
}
答案 0 :(得分:1)
如果您想这样做,则应将static
修饰符添加到ChainType
中的字段:
public class ChainType
{
public static ChainType none;
public static ChainType unknown;
...
public static ChainType rightBottomCornerCross;
}
但我不认为这会解决你的问题。它会编译但不起作用。
chainType
是指针,所以没有,未知,....只有当你指定chainType one of none,unknown,....时,你可以比较它。
枚举应该更好:
public enum ChainType
{
none,
unknown,
...
}
切换到枚举后无需更改代码。
编辑(“我正在尝试遵循36号提示.devmag.org.za/2012/07/12 /”)
你得到了错误的方法。提示36说你应该为子弹而不是使用数组的单独变量:
Bullet bulletTypeA
Bullet bulletTypeB
...
而不是
Bullet[] bullets;
bullets[BulletType.A]
答案 1 :(得分:1)
提示实际上解决了enum
s,所以让我们忘掉它。
您的代码与示例之间存在细微差别。班级名称为Bullets
,复数。您
应该将您的班级名称更改为ChainTypes
,您应该没事。
public class ChainTypes
{
public ChainType none;
public ChainType unknown;
public ChainType horizontal;
public ChainType vertical;
public ChainType centerCross;
public ChainType leftTopCornerCross;
public ChainType rightTopCornerCross;
public ChainType leftBottomCornerCross;
public ChainType rightBottomCornerCross;
}
ChainTypes types = new ChainTypes();
ChainType chaintype = getChainType();
if (chainType == types.horizontal) {
}
我理解这个推理,但这在比较中可能相当棘手(提示没有解决Bullet
的用法。比较是在引用上完成的,所以你必须做{{1}静态并确保始终返回正确的实例。
答案 2 :(得分:0)
首先:你必须将它们定义为静态:
public class ChainType
{
public static ChainType none; //STATIC !!
...
}
因此您可以像ChainType.horizontal
一样访问它们。
第二:关注一个事实,即编写像
这样的代码if(chainType == ChainType.horizontal){..}
复制引用这两种情况, 不 其内容。 如果这是您所期望的,请继续第一个修复,如果没有,您还必须为您的类型定义自定义相等比较器。
答案 3 :(得分:0)
您应该使用枚举来实现此目的:
public enum ChainType
{
none,
unknown,
horizontal,
vertical,
centerCross,
leftTopCornerCross,
rightTopCornerCross,
leftBottomCornerCross,
rightBottomCornerCross
}
public class aClass{
ChainType chainType = ChainType.horizontal;
someMethod(){
if(chainType == ChainType.horizontal){..}
}
}
答案 4 :(得分:0)
我不确定这是否是最佳方法。如果你使用这些类来定义什么是什么,那么我会推荐一个枚举。
如果在某种继承结构中需要它们,那么你应该比较GetType()或typeof(object)。
最后,如果您需要测试两个对象是否相同(在程序中的实际内容中),那么您缺少每个实例变量的初始化,并且您的getChainType应该返回其中一个实例。
答案 5 :(得分:0)
所有答案都是正确的,大喊大叫使用枚举(虽然这是最好的做法),但让我们看看错误,错误是自我解释。您正在直接访问Class的非静态属性(Class而不是其对象)Insead您可以尝试使用chainType.horizontal(此处chainType是ChainType类的对象)。