Java—将不相关的类分组到一个名称下

Java—将不相关的类分组到一个名称下,java,class,oop,methods,attributes,Java,Class,Oop,Methods,Attributes,我是java新手,当时正在创建一个代码,我有几个类,比如:Foo,Bar,Fiz,和Baz。在我的代码中,所有这些类都是相关的,但它们没有任何公共方法/属性。我希望能够访问它们各自的所有属性和方法,同时能够将它们组合在一起。例如,我想做这样的事情: grouperabc=newfoo(); 石斑鱼xyz=新的Baz(); //Foo有一个属性foosAttr int i=abc.foosAttr; 我怎么能做到这一点呢?我很肯定你不能,也肯定你不应该。如果没有向下转换(例如kotlin中的类型

我是java新手,当时正在创建一个代码,我有几个类,比如:
Foo
Bar
Fiz
,和
Baz
。在我的代码中,所有这些类都是相关的,但它们没有任何公共方法/属性。我希望能够访问它们各自的所有属性和方法,同时能够将它们组合在一起。例如,我想做这样的事情:

grouperabc=newfoo();
石斑鱼xyz=新的Baz();
//Foo有一个属性foosAttr
int i=abc.foosAttr;

我怎么能做到这一点呢?

我很肯定你不能,也肯定你不应该。如果没有向下转换(例如kotlin中的类型检查和编译器自动转换)之类的功能,这是不可能的——它会破坏很多规则

以稍微不同的方式,您可以尝试使用泛型,如:

类石斑鱼{
私人T包装;
...
公共T getWrapped(){
返回包装;
}
}
...
Grouper foo=Grouper.of(new foo());
石斑条=Grouper.of(新条());
int i=foo.getWrapped().foosAttr;

我很肯定你不能,也肯定你不应该。如果没有向下转换(例如kotlin中的类型检查和编译器自动转换)之类的功能,这是不可能的——它会破坏很多规则

以稍微不同的方式,您可以尝试使用泛型,如:

类石斑鱼{
私人T包装;
...
公共T getWrapped(){
返回包装;
}
}
...
Grouper foo=Grouper.of(new foo());
石斑条=Grouper.of(新条());
int i=foo.getWrapped().foosAttr;

另外,您不能对接口执行类似的操作吗?其中您有一个接口
Grouper
,它有
getWrapped
,在实现时返回
this
?这是好的实践和有效的吗?泛型本身就是完美的好实践。但是,当然,就像任何技术一样,它们也会被不恰当地使用,或者只是简单地被滥用。他们的效率与普通班级相当。是的,你当然可以把
Grouper
变成一个接口,而不是一个类。我分析了这一点,令人惊讶的是,接口的想法比泛型的快了不到10倍!嗯,是的,但在我的代码中,Foo和Bar对石斑鱼一无所知——而且他们不应该像你说的那样,他们没有任何共同之处。Grouper是一个外部实体,是一个典型的util,它可以位于库中,而不需要任何其他类的知识。取决于您真正想要什么:)另外,您不能对接口执行类似的操作吗?其中您有一个接口
Grouper
,它有
getWrapped
,在实现时返回
this
?这是好的实践和有效的吗?泛型本身就是完美的好实践。但是,当然,就像任何技术一样,它们也会被不恰当地使用,或者只是简单地被滥用。他们的效率与普通班级相当。是的,你当然可以把
Grouper
变成一个接口,而不是一个类。我分析了这一点,令人惊讶的是,接口的想法比泛型的快了不到10倍!嗯,是的,但在我的代码中,Foo和Bar对石斑鱼一无所知——而且他们不应该像你说的那样,他们没有任何共同之处。Grouper是一个外部实体,是一个典型的util,它可以位于库中,而不需要任何其他类的知识。取决于你真正想要什么:)