Статические классы в Java

Следующий класс функций будет соответствовать сигнатуре вашего FuncType:

struct Foo
{
    AnotherClass & a_;
    Foo(AnotherClass & a) a_(a) {}

    double operator()(int i) const
    {
        return a_.funcAnother(i);
    }
};

Измените MyClass :: вычислите шаблон, таким образом:

template<typename FuncType>
void MyClass::compute(FuncType foo) 
{
    int a=1;
    foo(a);
}

Затем вы можете позвонить выполните следующие действия:

void MyClass::run()
{
    compute(Foo(*obj_));
}

Если ваш компилятор поддерживает lambdas (и есть хорошая вероятность, что он это делает), вы можете отказаться от класса функции и просто определить выполнение следующим образом:

void MyClass::run()
{
    auto f = [this](int i) {
        return obj_->funcAnother(i);
    };

    compute(f);
}
883
задан Mark 22 October 2016 в 13:01
поделиться

4 ответа

Используя статические классы является просто большим для группировки целей. Поскольку Java позволяет нам классам группы, которые полезны друг для друга, мы группируем их только для держания их вместе под единственным статичным ключевым словом.

Java поддерживает вложенные классы, и они могут быть статичными. Эти статические классы также называют статическими вложенными классами. Java статический вложенный класс может получить доступ только к статическим членам внешнего класса. Статический вложенный класс ведет себя подобный классу верхнего уровня и вкладывается только для упаковочного удобства.

Let’s смотрят на пример Java статический класс и видят, как он может использоваться в программе Java.

public class OuterClass {

private static String name = "Mohammad";

// static nested class
static class StaticNestedClass {
    private int a;

    public int getA() {
        return this.a;
    }

    public String getName() {
        return name;
    }
  }
}

Теперь let’s видят, как инстанцировать и использовать статический вложенный класс.

public class StaticNestedClassTest {

public static void main(String[] args) {

    //creating instance of static nested class
    OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();

    //accessing outer class static member
    System.out.println(nested.getName());    // Printing "Mohammad"
    }
}

Посмотрите больше деталей здесь:

Понимающий Статический Класс в Java | Java Вложенный Класс

Статический класс в Java

Java Статический Класс: шаг вперед в Вашей поездке программирования Java

Java Вложенный и Внутренний Класс

1
ответ дан 22 November 2019 в 21:03
поделиться

Вы не можете использовать статическое ключевое слово с классом, если это не внутренний класс. Статический внутренний класс является вложенным классом, который является статическим членом внешнего класса. К этому можно получить доступ, не инстанцируя внешнего класса, с помощью других статических участников. Точно так же, как статические участники статический вложенный класс не имеет доступа к переменным экземпляра и методам внешнего класса.

public class Outer {
   static class Nested_Demo {
      public void my_method() {
          System.out.println("This is my nested class");
      }
   }
public static void main(String args[]) {
      Outer.Nested_Demo nested = new Outer.Nested_Demo();
      nested.my_method();
   }
}
0
ответ дан 22 November 2019 в 21:03
поделиться

Статический метод означает, что к нему можно получить доступ, не создавая объект класса, в отличие от общественности:

public class MyClass {
   // Static method
   static void myStaticMethod() {
      System.out.println("Static methods can be called without creating objects");
   }

  // Public method
  public void myPublicMethod() {
      System.out.println("Public methods must be called by creating objects");
   }

  // Main method
  public static void main(String[ ] args) {
      myStaticMethod(); // Call the static method
    // myPublicMethod(); This would output an error

    MyClass myObj = new MyClass(); // Create an object of MyClass
    myObj.myPublicMethod(); // Call the public method
  }
}
1
ответ дан 22 November 2019 в 21:03
поделиться

Все хорошие ответы, но я не сделал видел ссылку на java.util. Наборы, который использует тонны статического внутреннего класса для их статических факторных методов. Так добавление того же.

Добавление примера от java.util. Наборы, который имеет несколько статический внутренний класс. Внутренние классы полезны для кода группы, к которому нужно получить доступ через внешний класс.

/**
 * @serial include
 */
static class UnmodifiableSet<E> extends UnmodifiableCollection<E>
                             implements Set<E>, Serializable {
    private static final long serialVersionUID = -9215047833775013803L;

    UnmodifiableSet(Set<? extends E> s)     {super(s);}
    public boolean equals(Object o) {return o == this || c.equals(o);}
    public int hashCode()           {return c.hashCode();}
}

Вот статический факторный метод в java.util. Класс

public static <T> Set<T> unmodifiableSet(Set<? extends T> s) {
    return new UnmodifiableSet<>(s);
}
наборов
-1
ответ дан 22 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: