小编Pra*_*anD的帖子

为什么Java编译器不能理解这个变量总是被初始化?

class Foo{
    public static void main(String args[]){
        final int x=101;

        int y;
        if(x>100){
            y=-1;
        }
        System.out.println(y);
    }
}
Run Code Online (Sandbox Code Playgroud)

Java编译器理解if语句的条件始终为true,因此将始终初始化y.没有编译错误,如预期的那样.

class Bar{
    public static void main(String args[]){
        final int x;
        x=101;

        int y;      
        if(x>100){
            y=-1;
        }
        System.out.println(y);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我将x的声明和初始化分成两行时,编译器似乎并不认为条件总是为真,并且y将始终被初始化.

final int x;
x=101;
byte b;
b=x;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

这里发生了同样的事情,编译器会丢失精度错误.

final int x=101;
byte b;
b=x;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

同样,编译器可以理解x在b的范围内.

java conditional final initialization

54
推荐指数
3
解决办法
3065
查看次数

为什么我不能在静态上下文中使用"super"变量,即使"super"指的是父类而不是类实例,不像"this"?

我说的是java语言.

变量"this"在类中使用时,引用该类的当前实例,这意味着您不能在静态方法中使用"this".

但是"super",当在类中使用时,指的是该类的超类,而不是超类的实例,这应该意味着你可以在静态方法中使用"super".但事实证明你做不到.

一个可能的解释是说"超级"也指超类的一个实例,但我不明白为什么它应该......

java static this super

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

在System.java源中,标准输入,输出和错误流被声明为final并初始化为null?

    public final static InputStream in = null;
    public final static PrintStream out = null;
    public final static PrintStream err = null;
Run Code Online (Sandbox Code Playgroud)

但是我们非常清楚,这些流默认连接到控制台并且已经打开.System类setIn(),setOut和setErr()中还有一些方法可以重定向流.当它们被声明为final并设置为初始化值null时,这有什么可能吗?

我编译了以下代码,在调用println()时设置断点并使用netbeans进行调试.我的目标是通过步入源来确定何时将变量System.in初始化为标准输出.但似乎输出流输出已经在调用main方法时初始化.

public static void main(String[] args) {
        System.out.println("foo");
}
Run Code Online (Sandbox Code Playgroud)

java stream

12
推荐指数
3
解决办法
430
查看次数

为什么这里不需要明确的演员?

class MyClass {
    void myMethod(byte b) {
        System.out.print("myMethod1");
    }

    public static void main(String [] args) {
        MyClass me = new MyClass();
        me.myMethod(12);
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解myMethod()作为int文字的参数,并且参数b是byte类型,这段代码会产生编译时错误.(这可以通过投给参数显式字节来避免:myMethod((byte)12))

class MyClass{
    byte myMethod() {
        return 12;
    }

    public static void main(String [ ] args) {
        MyClass me = new MyClass();
        me.myMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

在经历了这个之后,我预计上面的代码也会产生编译时错误,因为12是一个int文字,返回类型myMethod()是字节.但是没有发生这样的错误.(无需显式的转换:return (byte)12;)

谢谢.

java methods casting return-type

11
推荐指数
1
解决办法
270
查看次数

在语义UI(React)中创建粘滞条.滚动时页面跳转

我正在使用语义中的组件来创建顶级菜单+ breadcrumb标头.出于某种原因,当尝试从最顶部位置滚动时,滚动条会"跳跃"

沙箱https://codesandbox.io/s/y7k3zn5qn1

我没有提供context粘性组件的道具.在示例中,它们始终提供封闭的React DOM引用div作为Sticky组件的上下文prop .关于context道具的目的,文件不清楚.(它说"粘性元素应该坚持的上下文")

我是否需要为粘性组件提供上下文支持以停止"跳转"滚动?如果是这样,我如何决定哪个封闭div ref作为上下文道具?

sticky semantic-ui semantic-ui-react

8
推荐指数
1
解决办法
4072
查看次数

获取Activity或Fragment之外的ViewModel实例的正确方法

我正在构建一个位置应用程序,我在MainActivity中的Room数据库中显示背景位置.我可以通过调用获得ViewModel

locationViewModel = ViewModelProviders.of(this).get(LocationViewModel.class);
locationViewModel.getLocations().observe(this, this);
Run Code Online (Sandbox Code Playgroud)

当我通过BroadCastReceiver接收位置更新时,应将定期背景位置保存到会议室数据库.他们应该通过电话保存locationViewModel.getLocations().setValue()

public class LocationUpdatesBroadcastReceiver extends BroadcastReceiver {

    static final String ACTION_PROCESS_UPDATES =
            "com.google.android.gms.location.sample.backgroundlocationupdates.action" +
                    ".PROCESS_UPDATES";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null) {
            final String action = intent.getAction();
            if (ACTION_PROCESS_UPDATES.equals(action)) {
                LocationResult result = LocationResult.extractResult(intent);
                if (result != null) {
                    List<Location> locations = result.getLocations();
                    List<SavedLocation> locationsToSave = covertToSavedLocations(locations)
                    //Need an instance of LocationViewModel to call locationViewModel.getLocations().setValue(locationsToSave)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我应该如何在像这个BroadcastReceiver这样的非活动类中获取LocationViewModel实例?调用locationViewModel = ViewModelProviders.of(context).get(LocationViewModel.class)上下文是我从onReceive (Context …

android android-viewmodel android-architecture-components

8
推荐指数
1
解决办法
2708
查看次数

无法找到明确的活动类。您是否在 AndroidManifest.xml 中声明了此活动

我正在尝试在我的应用程序中实现一个 PreferenceActivity,遵循这个问题中接受的答案

我得到上述异常

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.iphonik.chameleon/com.iphonik.AppPreferenceActivity}; have you declared this activity in your AndroidManifest.xml?
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iphonik.chameleon">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.NoTitleBar">
        <activity android:name=".MainMenu">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Movies" />
        <activity android:name=".SettingsActivity" />
        <activity android:name=".InfoActivity" />

        <receiver
            android:name=".AppBroadcastReciever"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" …
Run Code Online (Sandbox Code Playgroud)

android android-manifest

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

如何在网页上显示来自本地机器的图像

这是场景:我在 LAN 网络上有两台机器。其中之一是充当 Web 服务器。当第二个客户端机器浏览器 (Firefox) 从服务器发出请求时,它发送以下 html

<!DOCTYPE HTML>
<html>
<body>
<img src="C:\Users\General\Desktop\map1.jpg" align="middle">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是图像不显示。我对 img 标签尝试了以下变体:

<img src="C:/Users/General/Desktop/map1.jpg" align="middle">
<img src="file:///C:/Users/General/Desktop/map1.jpg" align="middle">
<img src="http://localhost//file:/C:/Users/General/Desktop/map1.jpg" align="middle">
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我查看页面源代码并将 html 内容保存到本地文件并在它工作的浏览器中打开它。完全相同的 html 代码在从服务器获取时不起作用,但在本地机器上打开时起作用。

请注意,我正在尝试从客户端计算机加载图像,因为在我的场景中不可能在服务器计算机上存储图像。(服务器实际上是一个没有 SD 卡的 Arduino Mega)

html image

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

为什么这个赋值不需要显式转换?

考虑以下代码:

byte b=1;
long l=1000;
b += l;
Run Code Online (Sandbox Code Playgroud)

我希望最后一个语句需要一个显式的强制转换因为, b+=l被评估为,b = b+l(b+l)part给出一个整数.没有显式强制转换,无法将整数分配给byte?

java casting operators

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

MySQL中group by语句后选择对应的非聚合列

我有一个从更大的表派生出来的临时表。

+-----+----------+---------+
| id  | phone    | attempt |
+-----+----------+---------+
|  1  | 12345678 |      15 |
|  2  | 87654321 |       0 |
|  4  | 12345678 |      16 |
|  5  | 12345678 |      14 |
|  10 | 87654321 |       1 |
|  11 | 87654321 |       2 |
+-----+----------+---------+
Run Code Online (Sandbox Code Playgroud)

我需要找到与每个电话号码上的最高尝试相对应的 ID(唯一)。电话和尝试并不是独一无二的。

SELECT id, MAX(attempt) FROM temp2 GROUP BY phone
Run Code Online (Sandbox Code Playgroud)

上述查询不会返回相应最大尝试次数的 ID。

mysql sql aggregate-functions

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