标签: nested-class

在哪里以及如何使用嵌套类?

我想如果一个类只在另一个类中实例化,那么在该类中嵌套使用它是正确的.我认为这将有助于我们良好的设计.当我看到我的项目时,我几乎从未见过这样的嵌套结构.但是,如果我尝试嵌套类,那么这次我脑子里会出现另一个问题.例如

我有Board类,Move类,如ShortCastle,LongCastle,EnPassant,Promote和Pieces,如Pawn,Queen,Rook,Knight等.很明显,Board类将实例化Piece类,Piece类将实例化Move类.对于一个好的设计,Promote移动类应该嵌套Pawn,因为只有pawn可以提升自己.short和long Castles应该嵌套King,因为只有king可以有这样的类型移动.

试图将所有Piece类放入Board类并不是很好的设计,因为8-9类将在Board类中,并且它真的很烦人,一个Board类文件太大而且难以读取.我更喜欢将每个类保持在另一个类中文件.很好,我们可以创建部分董事会类但仍然不烦恼8-9部分董事会类文件将持有每个类的类?最好不要让它们嵌套吗?相同的部分为另一个Move类创建另一个部分Piece文件?如果嵌套类只占用很小的空间,那么它不会有任何问题,但是如果需要很多方法呢?

.net c# nested-class

10
推荐指数
1
解决办法
618
查看次数

可以为嵌套的私有类重载operator <<吗?

如何为一个像这样的嵌套私有类重载一个operator <<?

class outer {
  private:
    class nested {
       friend ostream& operator<<(ostream& os, const nested& a);
    };
  // ...
};
Run Code Online (Sandbox Code Playgroud)

在外部类编译器之外尝试抱怨隐私时:

error: ‘class outer::nested’ is private
Run Code Online (Sandbox Code Playgroud)

c++ nested operator-overloading nested-class

10
推荐指数
2
解决办法
3841
查看次数

为什么GCC允许从私有嵌套类继承?

请考虑以下代码:

class A {
  class B {};
};

template <typename C>
class D : A::B {};

void f() {
  D<int> d;
}
Run Code Online (Sandbox Code Playgroud)

D<int>继承自A::B哪个私有嵌套类.我原以为这是一个错误,但GCC接受这个代码.它是海湾合作委员会的一个错误还是我错过了什么?

c++ gcc g++ nested-class private-members

10
推荐指数
1
解决办法
218
查看次数

Java注释 - javac编译器错误?

我在嵌套类中的方法参数注释中遇到了一个奇怪的效果.看起来非常像编译器问题.有关重现的详细信息和步骤,请参见下文.

使用javac编译以下类(我使用了javac 1.7.0_51).请注意带注释的参数"boolean param3".

import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

public class TestAnnotations {

    public String a;

    @Retention(RetentionPolicy.CLASS)
    @interface MyAnnotation {}

    protected class TestInner {

        public TestInner(String param1, Object param2, 
                                     @MyAnnotation boolean param3) {}

        public void accessField() {
            System.out.println(TestAnnotations.this.a);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后用javap检查嵌套类(即javap -p -v -c TestAnnotations $ TestInner.class).它的构造函数如下所示.

 public test.TestAnnotations$TestInner(test.TestAnnotations, java.lang.String, 
                                                java.lang.Object, boolean);
   flags: ACC_PUBLIC
   Code:
     stack=2, locals=5, args_size=5
        0: aload_0
        1: aload_1
        2: putfield      #1                  // Field this$0:Ltest/TestAnnotations;
        5: aload_0
        6: invokespecial #2                  // Method java/lang/Object."<init>":()V
        9: return …
Run Code Online (Sandbox Code Playgroud)

java annotations javac nested-class

10
推荐指数
1
解决办法
597
查看次数

Bloch Effective Java - 支持非静态的静态类 - 有多少个实例?

我想知道封闭类可以创建多少个静态成员类的实例.我只假设一个,但是Bloch的以下摘录对我来说没有意义.

引用Joshua Bloch的有效Java - 项目22*:支持非静态的静态成员类.

私有静态成员类的常见用法是表示由其封闭类表示的对象的组件.例如,考虑一个Map键,它将键与值相关联.许多Map实现都为地图中的每个键值对都有一个内部Entry对象.虽然每个条目都与一个映射关联,但条目上的方法(getKey,getValue和setValue)不需要访问映射.因此,使用非静态成员类来表示条目是浪费的:私有静态成员类是最好的.如果您不小心在条目声明中省略了静态修饰符,则地图仍然有效,但每个条目都将包含对地图的多余引用,这会浪费空间和时间.

他声明地图为地图中的每个键值对创建了一个Entry对象,即静态成员类的多个实例.

所以我的假设是错误的!这意味着我对静态成员类的理解是错误的.每个人都知道静态成员变量的行为方式,例如经典的静态最终字符串 - 只有一个对象的实例.

这是否意味着当实例化封闭对象时,实际上没有实例化静态成员类?

那么在这种情况下,使用静态成员类进行Entry的Map有什么意义呢?为什么不在API上使用接口?然后,每个其他Collections类都可以提供它自己的实现.

[*]刚才意识到它是我所拥有的PDF版本的第18项

java oop nested-class static-class

10
推荐指数
2
解决办法
2829
查看次数

何时将静态嵌套类(以及其中的静态成员)加载到内存中?

在这里,我试图使用内部静态助手类为我的数据库连接实现单例类:

package com.myapp.modellayer;

public class DatabaseConnection {

    private DatabaseConnection() {
        //JDBC code...
    }

    private static class ConnectionHelper {
        // Instantiating the outer class
        private static final DatabaseConnection INSTANCE = new DatabaseConnection();
    }

    public static DatabaseConnection getInstance() {
        return ConnectionHelper.INSTANCE;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑这个静态内部类ConnectionHelper何时被加载到JVM内存中:

在加载DatabaseConnection类时,还是在调用getInstance()方法时?

java singleton static-members nested-class

10
推荐指数
2
解决办法
2433
查看次数

你想什么时候在C#中嵌套类?

具体来说,任何人都可以给我具体的例子,说明何时或何时不使用嵌套类?

我永远都知道这个功能,但从来没有理由使用它.

谢谢.

c# class-design nested class nested-class

9
推荐指数
2
解决办法
972
查看次数

C#中的继承+ NestedClasses

我们可以在C#中使用嵌套类.这些嵌套类也可以继承OuterClass.例如:

public class OuterClass
{
  // code here
  public class NestedClass : OuterClass
  {
    // code here
  }
}
Run Code Online (Sandbox Code Playgroud)

完全可以接受.

我们也可以在不将NestedClass作为OuterClass的嵌套类的情况下实现这一点,如下所示:

public class OuterClass
{
  // code here
}

public class NestedClass : OuterClass
{
  // code here
}
Run Code Online (Sandbox Code Playgroud)

我想知道,上面两个场景之间有什么区别?在方案I中可以实现什么,在方案II中无法实现?通过使NestedClass"嵌套"到OuterClasss,我们能得到更多的东西吗?

c# inheritance nested-class

9
推荐指数
2
解决办法
6178
查看次数

Ruby作用域,常量优先级:词法作用域或继承树

我将从rubykoans教程中显示您的代码片段.考虑下一个代码:

class MyAnimals
LEGS = 2

  class Bird < Animal
    def legs_in_bird
      LEGS
    end
  end
end

def test_who_wins_with_both_nested_and_inherited_constants
  assert_equal 2, MyAnimals::Bird.new.legs_in_bird
end

# QUESTION: Which has precedence: The constant in the lexical scope,
# or the constant from the inheritance hierarchy?
# ------------------------------------------------------------------

class MyAnimals::Oyster < Animal
  def legs_in_oyster
    LEGS
  end
end

def test_who_wins_with_explicit_scoping_on_class_definition
  assert_equal 4, MyAnimals::Oyster.new.legs_in_oyster
end

# QUESTION: Now which has precedence: The constant in the lexical
# scope, or the constant from the inheritance hierarchy? …
Run Code Online (Sandbox Code Playgroud)

ruby nested-class scopes

9
推荐指数
1
解决办法
1987
查看次数

如何用css引用嵌套类?

使用css时,如何指定嵌套类.

这是我的html代码:

<div class="box1">
    <div class="box box-default">
      <div class="box-header with-border">
        <h3 class="box-title">Collapsable</h3>
        <div class="box-tools pull-right">
          <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
        </div><!-- /.box-tools -->
      </div><!-- /.box-header -->
      <div class="box-body">
        <p><i class="fa fa-phone"></i><span style=""> Phone : 0800 000 000</span></p>
        <p><i class="fa fa-home"></i><span style=""> Web : http://www.example.com</span></p>
        <p><i class="fa fa-map-marker"></i><span style=""> Map : example map address</span></p>
        <p><i class="fa fa-envelope"></i><span style=""> Email : example@address.com</span></p>
      </div><!-- /.box-body -->
    </div><!-- /.box -->
</div>
Run Code Online (Sandbox Code Playgroud)

css代码适用html于页面上的所有内容:

<style type="text/css">
    i{width: 30px;}
</style> …
Run Code Online (Sandbox Code Playgroud)

html css class nested-class

9
推荐指数
1
解决办法
4万
查看次数