The Law of Demeter suggests that you shouldn't call methods on objects two layers down like that.
The idea is that, in your case, you should have a method findIndexSmoothed on tr which in turn calls findIndexSmoothed on t.
What this does is makes your code adaptable. It means that the nature of tr.findIndexSmoothed can change without necessarily changing the nature of t.findIndexSmoothed, which may be called by other code you don't intend to change.
However, it is commonly noted that it's pretty rare you really need that adaptability, and you'll have put yourself in a position where maintenance of t.findIndexSmoothed now requires maintenance of tr.findIndexSmoothed so, in some cases, you will increase your workload.
So, the answer to your question, as so many style questions in programming, is: Use your common sense. Keep the Law of Demeter in mind, but never make it an inflexible truth.
tmember inside thetrobject is reachable (public) then you are not breaking encapsulation: the purpose of making a member (field or method) public is to allow direct access to it.NullPointerException, which is null,tr,tr.torarg0?)tr.t's signature is changed from whateverclassis currently used, to a newly definedinterface, then the "over-coupling" is broken. Clients would know what they can do.trcan make any needed changes in future. It is the public exposure of a property as a class rather than a more limited interface, that is the root of the problem. (Typically: maketprivate, perhaps as_t, then add a getter that exposest, but using aninterfacetype.)