除非我们更改编译器,否则Java会错过import X as Y语法,这在我的情况下很有用:在这个时刻我正在开发一个项目,它有多个具有相同名称的类,但属于不同的包.
我想有类似的东西
import com.very.long.prefix.bar.Foo as BarFoo
import org.other.very.long.prefix.baz.Foo as BazFoo
class X {
    BarFoo a;
    BazFoo b;
    ...
}
相反,我完成了类似的事情
class X {
    com.very.long.prefix.bar.Foo a;
    org.other.very.long.prefix.baz.Foo b;
    ...
}
这看起来非常有害,但在我的具体情况下,我需要使用水平滚动来浏览我的源代码,并且这样可以使程序更糟糕,这已经是一个混乱.
根据您的经验,这种情况下的最佳做法是什么?
Gor*_*vic 10
我觉得你的痛苦,无论你使用哪种解决方案,都有两个同名的类很容易让人困惑.
解决方法有几种解决方法:
BarFoo和BazFoo这做无非扩展各自的另一Foo从而类为他们提供自己的名字.您甚至可以将它们定义为内部类.例:private BarFoo extends com.very.long.prefix.bar.Foo{
//nothing, except possibly constructor wrappers
}
private BazFoo extends com.very.long.prefix.bar.Foo{
//nothing, except possibly constructor wrappers
}
class X {
   BarFoo a;
   BazFoo b;
   //...
}
但是有一些缺点:
getClass.您可以通过包装Foo类而不是扩展它们来解决这些缺点,例如:
private BarFoo {
   public com.very.long.prefix.bar.Foo realFoo;
}
private BazFoo extends com.very.long.prefix.bar.Foo{
  public com.very.long.prefix.baz.Foo realFoo;
}
class X {
    BarFoo a;
    BazFoo b;
    //now if you need to pass them
    someMethodThatTakesBazFoo(b.realFoo);
}
选择最简单的解决方案并祝你好运!
最佳实践是重构代码.
这两个类不应该具有相同的名称,因为在同一个类中使用它们是正常的,因此为两者选择相同的名称并不是明智的选择.所以其中一个至少应该重命名.
或者在同一个类中使用它们是不正常的,因为它们属于完全不同的抽象级别(例如数据库访问代码和UI代码),并且应该重构代码以使用必须使用的每个类而不是其他地方.
| 归档时间: | 
 | 
| 查看次数: | 2400 次 | 
| 最近记录: |