相关疑难解决方法(0)

内部阶级的目的是什么?

我正在回顾java中内部类的概念.到目前为止,我已经理解和应用java内部类有一个链接或访问其外部/封闭类的方法和字段.

我的问题:

  1. 什么时候应该创建或定义内部类?
  2. 内部类被认为是"助手类"吗?
  3. 你有什么指标来建立一个内部阶级,以及它们的另一个目的是什么?

java oop class inner-classes

46
推荐指数
4
解决办法
3万
查看次数

Java中常用内部类吗?他们"坏"吗?

Java中常用内部类吗?这些是否与嵌套类相同?或者用Java更换这些更好的东西?我有一本关于版本5的书,它有一个使用内部类的例子,但我想我读过一些内部类是"坏的".

我不知道,并希望有关于它的想法.

谢谢.

java inner-classes

21
推荐指数
3
解决办法
1万
查看次数

为简单的功能创建内部类是一种好习惯吗?

对于简单的内部类有一些不同的看法,所以我想知道对什么是好的以及何时使用私有内部类有一个普遍的共识.

这是我发现的一个例子,我认为没有必要创建一个内部类.这有多好/坏?

private static class InternalCounter {
  int count;

  public InternalTabManager() {
    count = 0;
  }

  public int increment() {
    return count++;
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在这种特殊情况下,一个实例保留在周围的类中以跟踪计数.

java inner-classes

7
推荐指数
2
解决办法
3810
查看次数

Java:扩展内部类

我试图理解在Java中扩展内部类.我已经阅读过,但没有找到我的问题.所以这里......

我有...

public class Pie{
    protected Slice[] slices;

    // Pie constructor
    public Pie(int n){
         sliceGenerator(n)
    }

    private void sliceGenerator(int n){
         slices = new Slice[n];
         final float sweepAngle = 360.0f/(float)n;
         float startAngle = 0;
         for (int i=0;i<n;i++){ 
             slices[i] = new Slice(startAngle);
             startAngle += sweepAngle;
         }
    }

    @Override
    public String toString(){
         for (Slice s:slices){  
             s.toString();
         }
    }

    // Inner class...
    public class Slice{
        public Slice(float startAngle){
             //set some private fields based on startAngle and generic pie 
        }

        @Override
        public String toString(){
             return …
Run Code Online (Sandbox Code Playgroud)

java inheritance extends class

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

如果大量使用,匿名内部类会对性能产生多大影响?

===结论====

找到一个很好的阅读https://softwareengineering.stackexchange.com/a/149569其中规定

当前的GC算法实际上是为了创建许多短暂的小对象而优化的. 所以我认为在项目中使用匿名内部类对于性能来说不是什么大问题*

================================================== ======================

因为函数不是当前Java(Java7)中的第一类公民,所以使用匿名内部类似乎是实现完整异步应用程序的唯一方法.

我知道它会在一定程度上带来更大的内存占用和垃圾收集器负担,但我不知道它有多严重?最近我的同事和我争论是因为我的代码是通过利用匿名内部类来编写的,他的反对意见完全取决于性能.虽然我不同意,但我不能举出任何证明自己的例子.我知道groovy正在使用匿名类实现闭包,但是groovy的性能比java差(当然匿名应该只承担部分责任,因为groovy也大量使用反射).

所以我想在现实世界中,有没有任何项目因为性能而放弃匿名课程?像swing这样的UI框架怎么样?是否大量使用匿名类?

没有匿名,我无法想象如何在java中优雅地实现异步.我们的项目已经使用一种非常丑陋的方式使类方法作为函数指针工作.我讨厌那么多,并想说服人们匿名上课是正确的方法.

我的例子:

// basically, I use Completion interface to make normal java methods work in async manner

public interface Completion {
    void success();

    void fail(String reason);
}


void methodA(Completion completion) {

     do_some_business_by_calling_remote_service ....

     when remote_service_ack_success:
         completion.success();
     else:
         completion.fail(remote_service_error);

}

void methodB() {
    methodA(new Completion() {
       public void success() {
           continue to do something;
       }

       public void fail(String err) {
           handle error
       }
    });
}
Run Code Online (Sandbox Code Playgroud)

java

3
推荐指数
1
解决办法
2493
查看次数

标签 统计

java ×5

inner-classes ×3

class ×2

extends ×1

inheritance ×1

oop ×1