---
title: OptimizelyUserContext for the Java SDK
slug: feature-experimentation/docs/optimizelyusercontext-java
docTags: 
createdAt: 2026-08-05T20:39:55.000Z
---

The `OptimizelyUserContext` object lets you make flag decisions and track events for a user context you have already created using the [Create User Context](docId\:AdphTGCbC7b8i3krPoZIc) method.

Also, if you have [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8) configured, you can evaluate if the user would qualify for an Optimizely Data Platform (ODP) real-time audience.

## OptimizelyUserContext minimum SDK version

SDK v3.7 and higher.

### Forced decision methods minimum SDK version

`setForcedDecision()`, `getForcedDecision()`, `removeForcedDecision()` and `removeAllForcedDecisions()` methods are supported on version 3.10.0 and higher.

### Real-Time Audiences for Feature Experimentation minimum SDK version

`fetchQualifiedSegments()` and `isQualifiedFor()` methods are supported on version 4.0.0 and higher.

## OptimizelyUserContext definition

The following code shows the object definition for `OptimizelyUserContext`:

```java
public class OptimizelyUserContext {
    public String getUserId()
    public Map<String, Object> getAttributes()

    public OptimizelyUserContext(Optimizely optimizely, 
                                 String userId, 
                                 Map<String, Object> attributes)
      
    // set an attribute for the user
    public void setAttribute(String key, Object value)
    
    // make a decision about which flag variation the user buckets into for the flag key
    public OptimizelyDecision decide(String key, 
                                     List<OptimizelyDecideOption> options)
    
    // make decisions about which flag variations the user buckets into for flag keys  
    public Map<String, OptimizelyDecision> decideForKeys(List<String> keys, 
                                      List<OptimizelyDecideOption> options)
    
    // make decisions about which flag variations the user buckets into for all flags  
    public Map<String, OptimizelyDecision> decideAll(List<OptimizelyDecideOption> options)
    
    // track user event  
    public void trackEvent(String eventName, Map<String, ?> eventTags)
  
    // sets a forced decision (variationKey) for a given decision context
    public Boolean setForcedDecision(OptimizelyDecisionContext context, OptimizelyForcedDecision decision)

    // returns the forced decision (variationKey) for a given decision context
    public OptimizelyForcedDecision getForcedDecision(OptimizelyDecisionContext context)

    // removes the forced decision (variationKey) for a given decision context
    public boolean removeForcedDecision(OptimizelyDecisionContext context)

    // removes all the forced decisions (variationKeys) for the user context
    public boolean removeAllForcedDecisions()
      
    //
    // The following methods require Real-Time Audiences for Feature Experimentation. 
    // See the note following the code sample. 
    //

    // An array of audience segment names that the user is qualified for. 
    // The result of **fetchQualifiedSegments()** is saved here. 
    // Can be null if not properly updated with fetchQualifiedSegments(). 
    // 
    //  You can read and write directly to the qualified segments array. 
    //  This lets you bypass the remote fetching process from ODP 
    //  or use your own fetching service.   
    public List<String> getQualifiedSegments()
    public void setQualifiedSegments(List<String> qualifiedSegments)
      
    // Fetch all qualified segments for the user context. 
    // The segments fetched are saved in the **qualifiedSegments** array
    // and can be accessed any time. 
    public Boolean fetchQualifiedSegments(List<ODPSegmentOption> segmentOptions) 

    // Fetch qualified segments for the user context in a non-blocking manner. 
    // This method fetches segments in a separate thread and invokes the provided 
    //  callback when results are available.
    public void fetchQualifiedSegments(ODPSegmentCallback callback, List<ODPSegmentOption> segmentOptions)
 
    //  Check if the user qualified for the given segment. 
    public boolean isQualifiedFor(String segment)
}
```

:::hint{type="info"}
**Note**
You must first configure [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8) to use the `getQualifiedSegments()`, `setQualifiedSegments()`, `fetchQualifiedSegments()`, and `isQualifiedFor()` methods.
:::

## Properties

The following table shows the attributes for the `OptimizelyUserContext` object:

| Attribute                 | Type   | Comment                                                                                                                                                                                                                                        |
| ------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \`userId\`                | String | The ID of the user                                                                                                                                                                                                                             |
| \`attributes\` (optional) | Map    | A map of custom key-value pairs specifying attributes for the user that are used for \[audience targeting]\(https\://support.optimizely.com/hc/en-us/articles/38683417490957). You can pass the map with the user ID when you create the user. |

## Methods

The following table shows methods for the `OptimizelyUserContext` object:

| Method                          | Comment                                                                                                                                                                                                                                                                                                                                  |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \`setAttribute\`                | Pass a custom user attribute as a key-value pair to the user context.                                                                                                                                                                                                                                                                    |
| \`decide\`                      | Returns a decision result for a flag key for a user in an OptimizelyDecision object containing all data required to deliver the flag rule. See \[Decide methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-java#example-decide).                                                              |
| \`decideAll\`                   | Returns decisions for all active (unarchived) flags for a user. See \[Decide methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-java#example-decideall).                                                                                                                                      |
| \`decideForKeys\`               | Returns a map of flag decisions for specified flag keys. See \[Decide methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-java#example-decideforkeys).                                                                                                                                         |
| \`trackEvent\`                  | Tracks a conversion event for a user (an action a user takes) and logs an error message if the specified event key does not match any existing events. See \[Track Event]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/track-event-java).                                                                       |
| \`setForcedDecision\`           | Forces a user into a specific variation. See \[Set Forced Decision]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#set-forced-decision-method---setforceddecision).                                                                                                                  |
| \`getForcedDecision\`           | Returns what variation the user was forced into. See \[Get Forced Decision]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#get-forced-decision-method---getforceddecision).                                                                                                          |
| \`removeForcedDecision\`        | Removes a user from a specific forced variation. See \[Remove Forced Decision]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#remove-forced-decision-method---removeforceddecision).                                                                                                 |
| \`removeAllForcedDecisions\`    | Removes a user from all forced variations. See \[Remove All Forced Decisions]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-java#remove-all-forced-decisions-method---removeallforceddecisions).                                                                                         |
| \`fetchQualifiedSegments\` \*\* | Fetch all ODP real-time audiences that the user context qualified for. See \[Real-Time Audiences for Feature Experimentation segment qualification methods for the Java SDK]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-java).  |
| \`isQualifiedFor\` \*\*         | Check if the user context qualifies for a given ODP real-time audience. See \[Real-Time Audiences for Feature Experimentation segment qualification methods for the Java SDK]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-java). |

\*\* Requires [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8).

## See also

[Create User Context](docId\:AdphTGCbC7b8i3krPoZIc)

## Source files

The language and platform source files containing the implementation for Java are available on [GitHub](https://github.com/optimizely/java-sdk/blob/master/core-httpclient-impl/src/main/java/com/optimizely/ab/OptimizelyHttpClient.java).
