What is the analog in Scala of doing this in Java:
public class Outer {
private Inner inner;
public static class Inner {
}
public Inner getInner() { return inner; }
}
I specifically want my inner class to not have to have a fully qualified name - i.e. I want Trade.Type
, not TradeType
. So in Scala I imagined it might be something like:
class Outer(val inner: Inner) {
object Inner
}
But this doesn't seem to work: my scala Inner
just doesn't seem to be visible from outside the Outer
class. One solution would of course be:
class Inner
class Outer(val inner: Inner)
Which is OK - but because of the names of my classes, Inner
is really the "type" of the Outer
and Outer
actually has a long name. So:
class SomeHorriblyLongNameType
class SomeHorriblyLongName(myType: SomeHorriblyLongNameType)
Which is verbose and horrible. I could replace SomeHorriblyLongNameType
with just Type
but there would then be no obvious connection between it and the class it was related to. Phew
You can do something like this if don't need access to the outer class in the inner class (which you wouldn't have in Java given that your inner class was declared
static
):Not sure I fully understood your use case... If it can help you, objects inside classes are visible like an instance's fields, e.g.
Moreover, you can perfectly override a parent's val with object:
In scala if you need to create a some static methods you can use a companion object, with the same name of the class, where you store all the pseudo static methods. Ex:
Then you can just use
A.xpto
.Try to read more about companion modules on scala
From scala-lang:
So it seems you could have a class defined inside an Object, but not a static class defined inside a class.
As others have pointed out, "static" classes should be placed inside the companion object.
In Scala, classes, traits, and objects which are members of a class are path-dependent. For example:
Now c1 and c2 are instances of -different- classes. One class is ok.Click, and the other is cancel.Click. If you wanted to refer to the type of all Click classes, you could say Button#Click.