相关疑难解决方法(0)

静态内部类是一个好主意还是糟糕的设计?

我发现我有几个地方设有公共静态内部类,扩展"帮助"类使我的代码更加类型安全,在我看来,可读.例如,假设我有一个"SearchCriteria"类.我搜索的不同内容有很多共性(搜索术语,然后是一组搜索术语类型,日期范围等).通过在静态内部类中扩展它,我将扩展和可搜索的紧密耦合在一起有特定差异的班级.这在理论上似乎是一个坏主意(Tight Coupling Bad!),但扩展特定于这个可搜索的类(One Class,One Purpose).

我的问题是,根据您的经验,使用静态内部类(或者您的语言等同于什么)使您的代码更具可读性/可维护性,或者最终在EOF中咬你?

此外,我不确定这是否是社区维基材料.

oop inheritance class nested-class inner-classes

5
推荐指数
1
解决办法
1369
查看次数

Java中静态和非静态内部类之间的非语法差异是什么?

可能重复:
Java内部类和静态嵌套类

静态内部类的实例不能访问其封闭类的实例成员,而非静态内部类的实例可以.这就是我的意思是句法差异.因为将内部类声明为静态是否确定程序的语法是否正确.

但是有没有其他差异不属于Java语法?假设A类是顶级类,B类是A的内部类.如果我不打算在B中访问A的实例成员,那么我应该声明B是静态的.但由于我不需要,我可以声明B是非静态的,并且不会出现编译错误.那么在这种情况下,是否有任何差异,可能是在生成的字节码或任何运行时差异?

谢谢!

java static inner-classes non-static

5
推荐指数
1
解决办法
361
查看次数

片段作为静态类

只是一个简短的问题:在我在android文档中看到的所有示例中,片段都是静态内部类.这是Android的要求吗?或者他们可以设置为常规内部类?是否有人了解Android的内部结构足以提供答案?

从我在OCJP文档中读到的内容来看,这些静态内部类根本不是类,而只是包含它们的类的静态成员,就像任何静态方法一样 - 例如main.

您的见解表示赞赏.

android android-fragments

5
推荐指数
1
解决办法
2953
查看次数

使用静态内部类

我有一个关于在以下代码中使用静态内部类的问题,改编自 Eckel's Thinking in Java 4th edition(第 625 页)。

该代码使用一个名为 Node.js 的静态内部类。创建堆栈结构时,您可以将节点推入堆栈并将它们弹出 - 到目前为止一切顺利。但是我对为什么节点类是静态的感到困惑?这不是意味着在 LinkedStack 类中只会创建一个 Node 吗?如何/为什么实际上您可以将许多不同的节点推入堆栈,然后将它们弹出(这当然是堆栈应该做的)。实际上,您可以更改private static class Node为“私有类 Node”,它也可以工作……那么为什么 Eckels 选择静态类 Node?

在这个例子中,输入是三个单词“Phasers”、“on”、“stun!” 并且输出是“stun!”、“on”、“Phasers”。

public class LinkedStack<T> {

    //generic inner class node
    private static class Node<U> {

        U item;
        Node<U> next;
        Node() {
            item = null;
            next = null;
        }
        Node(U item, Node<U> next) {
            this.item = item;
            this.next = next;
        }
        boolean isDummyNode() {
            return item == null && next == null;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
0
解决办法
1144
查看次数

最终类和静态类之间的区别

我知道一点java,多次使用final和static,但我在这里很安静:最终的A类和静态类B之间的基本区别是什么.我知道这些关键字.无法想象在类声明中使用final.

java

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

不能访问封闭的类型测试实例.必须在简单的测试程序上使用类型为测试错误的封闭实例来限定分配

我得到了无法封闭的类型测试实例.必须使用类型测试错误的封闭实例限定分配,Location ob1 = new Location(10.0, 20.0);我不知道为什么..

package pkg;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Location ob1 = new Location(10.0, 20.0);
        Location ob2 = new Location(5.0, 30.0);
        ob1.show();
        ob2.show();
        ob1 = ob1.plus(ob2);
        ob1.show();
        return;
    }

    public class Location // an ADT
    {
        private double longitude, latitude;

        public Location(double lg, double lt) {
            longitude = lg;
            latitude = lt;
        }

        public void show() {
            System.out.println(longitude + " " + latitude);
        } …
Run Code Online (Sandbox Code Playgroud)

java

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

内部类声明和初始化

我习惯用C++编写代码,但必须将项目从C++转换为Java.在C++中使用数据结构非常简单.我试图复制相同的东西,但如Java内部类和静态嵌套类.在线阅读了几个例子,并尝试了不同的版本,到目前为止这是我得到的:

public class Main {
  public static void main( String[] args ) {
  ...
    ClassOuter outerObj = new ClassOuter();

    ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();
  }
}

class ClassOuter{

  public static class DataInner{
    public int x;
  }
  ...
  protected void getNo()
  { value.x=Integer.parseInt("493"); 
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译时,它给了我错误:

$ javac -cp "./" Main.java
Main.java:15: error: '(' expected
    ClassOuter.DataInner value = outerObj.new ClassOuter.DataInner();
Run Code Online (Sandbox Code Playgroud)

关于这里缺少什么的任何线索?

java nested class object inner-classes

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

为什么LinkedList中的Node类定义为静态而不是普通类

在包java.util.LinkedList中,将类节点定义为一个静态类,是否有必要?目标是什么?

我们可以从此页面找到源代码。

java linked-list data-structures

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

为什么java不允许创建内部类的实例?

我有一个主类"m"和2个内部类叫做sub1,sub2,其中sub2是静态类:

public class m
{
  String n="n";
  static String s="s";
  public class sub1
  {
    public void fn(){System.out.println(n);}
    //static public void fs(){System.out.println(s);}
  }
  static class sub2
  {
    //public void fn(){System.out.println(n);}
    static public void fs(){System.out.println(s);}
  }
  public void f()
  {
    sub1 s1=new sub1();//OK, no error
    sub2 s2=new sub2();//OK
  }

  public static void main(String[] args)
  {
    m obj=new m();
    sub1 s1=new sub1();//Error
    s1.fn();
    //s1.fs();
    sub2 s2=new sub2();//OK
    //s2.fn();
    s2.fs();
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用Openjdk在linux下编译它,它报告错误

$ java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14) …
Run Code Online (Sandbox Code Playgroud)

java program-entry-point class instance

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

带/不带 baseObservable 的 android viewmodel

我试图在 android 中查看模型,所以对于 MainViewModel.java 我写了这个:


public class MainViewModel extends ViewModel {

    private String textView;
    private String editText;

    //@Bindable
    public String getTextView(){
        return textView;
    }

    private void setTextView(String value){
        textView=value;
    }

    //@Bindable
    public TextWatcher getEditTextWatcher() {
        return new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                setTextView(s.toString());
            }
            ...
        };
    }

}
Run Code Online (Sandbox Code Playgroud)

在 ActivityMain.xml 中我写了这样的内容:


        <TextView
            android:text="View-Model / Data-Binding"
            android:layout_width="match_parent"
            android:layout_height="40dp"/>

        <TextView
            android:id="@+id/main_text_view"
            android:text="@{mainvm.textView}"
            android:layout_width="match_parent"
            android:layout_height="40dp"/>

        <EditText
            android:id="@+id/main_edit_text"
            app:textChangeListener="@{mainvm.editTextWatcher}"
            android:layout_width="match_parent"
            android:layout_height="40dp"/>
Run Code Online (Sandbox Code Playgroud)

我收到 2 个错误:

Cannot …
Run Code Online (Sandbox Code Playgroud)

java android mvvm viewmodel

2
推荐指数
1
解决办法
4628
查看次数