Java中如何判断类X是否存在getValue()返回10的对象?
没问题,这完全可以实现!而且因为你明确类X仅有一个对象,实现起来其实比你想的更简单,下面分几种常见场景给你讲清楚:
实现思路与代码示例
场景1:你已经持有这个唯一对象的引用
如果在代码里已经能直接拿到这个X类的唯一实例(比如你已经通过X myX = new X();创建了它,且这是全局唯一的实例),那直接调用方法判断就好,完全不用复杂逻辑:
if (myX.getValue() == 10) { // 这里写你的判断后的业务逻辑 }
场景2:让类X自己维护唯一实例(单例模式)
如果这个唯一实例是在类内部创建的(推荐这种方式,能确保全局只有一个对象),可以给X类添加静态实例和获取方法,变成单例模式:
class X { private int x = 10; // 已知唯一对象的x值为10 // 类内部维护唯一实例 private static final X UNIQUE_INSTANCE = new X(); public int getValue() { return x; } // 对外提供获取唯一实例的静态方法 public static X getUniqueInstance() { return UNIQUE_INSTANCE; } }
之后判断逻辑就可以写成这样:
if (X.getUniqueInstance().getValue() == 10) { // 执行你需要的操作 }
特殊场景:无法直接拿到实例(迫不得已的方案)
如果这个唯一实例是在某个地方创建后没有暴露引用,那可以通过反射来查找JVM中的X类实例。但这种方式不推荐,性能差且不安全,仅作为极端情况的备选:
import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class XInstanceChecker { public static List<X> findXInstances() throws Exception { List<X> instances = new ArrayList<>(); // 通过反射查找类中的静态实例(因为唯一实例大概率是静态存储的) Class<X> xClass = X.class; Field[] fields = xClass.getDeclaredFields(); for (Field field : fields) { if (field.getType() == X.class && java.lang.reflect.Modifier.isStatic(field.getModifiers())) { field.setAccessible(true); instances.add((X) field.get(null)); } } return instances; } public static void main(String[] args) throws Exception { List<X> xInstances = findXInstances(); // 已知只有一个实例,直接取第一个判断 if (!xInstances.isEmpty() && xInstances.get(0).getValue() == 10) { System.out.println("满足条件"); } } }
最后总结一下
因为你明确类X只有一个对象,所以你要的if (any object of the class X .getValue() == 10)逻辑,本质上就是判断这个唯一实例的getValue()是否等于10——优先用前两种直接持有引用的方式,简单高效还安全。
内容的提问来源于stack exchange,提问作者Moritz347
相关产品推荐
相关产品推荐

