I'm wondering if this is the best way to write the Java code I have written. It works, but looks overly verbose, is it possible to rewrite any of the code to make it more concise? Please ignore the constructors for now as I'm going to add DI in the coming days. I did google beforehand but wasn't getting much luck with the search results. I'm coming from a C# background and still learning so if anything looks out of place please let me know. TIA.
package com.professorofprogramming.services;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
public class SettingsService {
    AppSettingsFileService appSettingsFileService;
    SimpleCacheService simpleCacheService;
    SettingsService() {
        appSettingsFileService = new AppSettingsFileService();
        simpleCacheService = new SimpleCacheService();
    }
    SettingsService(AppSettingsFileService asfs) {
        appSettingsFileService = asfs;
    }
    SettingsService(SimpleCacheService scs) {
        simpleCacheService = scs;
    }
    SettingsService(AppSettingsFileService asfs, SimpleCacheService scs) {
        appSettingsFileService = asfs;
        simpleCacheService = scs;
    }
    public String getSetting(String settingName) throws JSONException, IOException {
        return getSetting(settingName, true);
    }
    public String getSetting(String settingName, boolean useCache) throws JSONException, IOException {
        JSONObject jObject;
        String cachedSettingsKey = SettingsService.class.getName();
        if (useCache && simpleCacheService.contains(cachedSettingsKey)) {
            jObject = simpleCacheService.get(cachedSettingsKey);
        }
        else {
            jObject = readSettingsFile();
        }
        return jObject.getString(settingName);
    }
    private  JSONObject readSettingsFile() throws JSONException, IOException {
        String appSettingsFileContents = appSettingsFileService.getContents();
        return new JSONObject(appSettingsFileContents);
    }
}
    
SettingsServiceviolates the single responsibility principle and is a form of reinventing the wheel. There are many well known caching libraries that can be configured using annotations. If you really require a home cooked cache implementation, then it should be implemented as a decorator around theSettingsService. This requires defining the service as an interface. \$\endgroup\$